2012-03-28 6 views

답변

14

당신은 할 수 없습니다,하지만 당신은 그것을

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

어딘가에 파일을 저장해야 할까봐 걱정됩니다. 트릭은 사용자가 쓸 수있는 어딘가에 넣는 것입니다.

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

여기 bash-ism :'yourscriptvar = $ (< "$ HOME/.yourscriptvar")'가 있습니다. 문서 [여기] (http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution) –

+0

나는 그것을 좋아한다 ... 나는 bash hackery의 나의 가방에 넣을 것이다. 감사합니다 –

3

내가 몇 일 전에 같은 문제를 가지고 할 수있는 파일을 사용할 수 있습니다 내가 일 때문에 할 내 자신의 도구를 작성했습니다 비슷한 일을하는 다른 방법이 없습니다.

gvar은 각 사용자가 다른 데이터 수집을 갖는 순수한 배쉬 키 - 값 저장소입니다. 레코드는 사용자의 홈 디렉토리에 저장됩니다. 여기

그것입니다 소스 코드에서 가장 흥미로운 기능 : bash는 스크립트

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

허. 그러한 '도서관'의 경우 속도에 맞게 최적화 될 것이라고 생각할 것입니다. 예를 들어'grep'이 이미 파일을 인수로 취할 수 있기 때문에'grep'을 사용하면'cat'은 불필요합니다. 게다가, 만약'flock'이나 무언가를 사용하지 않으면 이것이 병렬 실행에서 어떻게 잘 작동하는지 궁금합니다. – Yeti

+0

@ 예티 당신은 완전히 옳습니다, gvar는 내 문제를 해결 한 장난감이지만 앞으로 나아 가지 않았습니다. 나는 당신이 지적한 유사한 것들을 생각했다. 감사. –