2012-03-28 14 views

Odpowiedz

14

nie można, ale można użyć pliku to zrobić

#!/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

Obawiam się, że musisz zapisać stan w pliku gdzieś. Sztuką jest umieszczenie go w miejscu, do którego użytkownik będzie mógł pisać.

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

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

+0

Podoba mi się ... Włożę to do mojej torby z hakami basha. dzięki –

3

miałem ten sam problem kilka dni temu pisałem moje własne narzędzie do pracy, ponieważ nie ma innego sposobu na zrobienie czegoś podobnego.

gvar jest czystym składem klucz-wartość Bash, w którym każdy użytkownik ma inną kolekcję danych. Zapisy są przechowywane w katalogu domowym użytkownika.

Tu jest najciekawsze funkcje z kodem źródłowym:

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. Można by pomyśleć, że dla takiej "biblioteki" zostałaby zoptymalizowana pod kątem szybkości. Na przykład 'cat' jest niepotrzebne, jeśli używasz' grep', ponieważ 'grep' może już pobierać plik jako argument. Poza tym zastanawiam się, jak to by działało dobrze w równoległym wykonaniu, jeśli nie używa "flock" lub czegoś takiego. – Yeti

+0

@ Tak, masz całkowitą rację, gvar to tylko zabawka, która rozwiązała mój problem, ale nie poszedłem do przodu. Myślałem o podobnych rzeczach, które wskazałeś. Dzięki. –

Powiązane problemy