2012-03-28 47 views
13

çalıştıran değişkende tutar Değişken değişken değerler içeren bir Bash komut dosyası oluşturabilir miyim? Örneğin, komut dosyası ilk kez çalıştırıldığında (belirli bir zaman sınırı sırasında) 0 ile bir değişkeni ilklendiririm ve değişken her defasında otomatik olarak artar.Bash Komut Dosyası'nda son değeri

+0

anahtar/değer veritabanı yazma; https://github.com/damphat/kv-bash :) – damphat

cevap

14

bunu yapamazsınız, ancak bunu

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

Maalesef, durumu bir dosyaya kaydetmelisiniz. Hile, kullanıcının yazabileceği bir yere koymaktır.

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

İşte bir bash-ism: 'yourscriptvar = $ (<" $ HOME/.yourscriptvar ")'. Belge [burada] (http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution) –

+0

Bunu sevdim ... Bunu bash hackery çantama koyacağım. teşekkürler –

3

Birkaç gün önce aynı problem vardı yapmak için bir dosyayı kullanabilirsiniz ve ben işi nedeniyle yapmak için kendi aracını yazdım Benzer bir şey yapmanın başka bir yolu yoktur.

gvar, her kullanıcının farklı bir veri koleksiyonuna sahip olduğu, saf bir Bash anahtar/değer deposu deposudur. Kayıtlar kullanıcının ev dizininde saklanır. İşte

öyle kaynak kodundan en ilginç fonksiyonları: bash komut

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. Böyle bir 'kütüphane' için hız için optimize edileceğini düşünürdünüz. Örneğin 'grep '' grep '' bir dosyayı argüman olarak alabildiğinden beri 'cat' gereksizdir. Ayrıca, eğer 'sürüs' ya da bir şey kullanmazsa bunun paralel yürütmede nasıl iyi işleyeceğini merak ediyorum. – Yeti

+0

@Yeti tamamen haklısın, gvar sorunumu çözen bir oyuncak ama ben ileri gitmedim. İşaret ettiğin benzer şeyleri düşündüm. Teşekkürler. –

İlgili konular