2012-03-28 13 views

risposta

14

non è possibile, ma è possibile utilizzare un file per farlo

#!/bin/sh 

# if we don't have a file, start at zero 
if [ ! -f "/tmp/value.dat" ] ; then 
    value=0 

# otherwise read the value from the file 
else 
    value=`cat /tmp/value.dat` 
fi 

# increment the value 
value=`expr ${value} + 1` 

# show it to the user 
echo "value: ${value}" 

# and save it for next time 
echo "${value}" > /tmp/value.dat 
3

Ho paura di dover salvare lo stato in un file da qualche parte. Il trucco è metterlo da qualche parte a cui l'utente sarà in grado di scrivere.

yourscriptvar=0 

if [ -e "$HOME/.yourscriptvar" ] ; then 
    yourscriptvar=$(cat "$HOME/.yourscriptvar") 
fi 

# do something in your script 

#save it output the file 
echo $yourscriptvar > "$HOME/.yourscriptvar" 
+1

Ecco un bash-ism: 'yourscriptvar = $ (<" $ HOME/.yourscriptvar ")'. Documentato [qui] (http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution) –

+0

Mi piace ... Lo metterò nella mia borsa di hackery bash. grazie –

3

ho avuto lo stesso problema qualche giorno fa e ho scritto il mio strumento per fare il lavoro a causa non c'è altro modo di fare qualcosa di simile.

gvar è un archivio di valori-chiave Bash puro in cui ogni utente ha una raccolta di dati diversa. I record sono memorizzati nella home directory dell'utente.

Qui è il più interessante funzioni dal codice sorgente:

chiave
get_variable() { 
    cat $FILE | grep -w $1 | cut -d'=' -f2 
} 

set_variable() { 
    echo $1=$2 >> $FILE 
} 

remove_variable() { 
    sed -i.bak "/^$1=/d" $FILE 
} 
+0

Huh. Si potrebbe pensare che per una tale "biblioteca" sarebbe ottimizzata per la velocità. Ad esempio, 'cat' non è necessario se si utilizza' grep' dato che 'grep' può già prendere un file come argomento. Inoltre, mi chiedo come questo potrebbe funzionare bene nell'esecuzione parallela se non usa 'flock' o qualcosa del genere. – Yeti

+0

@Yeti hai perfettamente ragione, gvar è solo un giocattolo che ha risolto il mio problema ma non sono andato avanti. Ho pensato cose simili che hai sottolineato. Grazie. –

Problemi correlati