1

私はbashスクリプトを持っていて、次回使用するために何かを書きたいと思っています:

#this get the full path of the script
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/$(basename $0)"

NUMBER=10

#This change only in the first occurrence 
cat "$SCRIPT" | sed "1,/NUMBER=../s/NUMBER=../NUMBER=$((NUMBER + 1))/" > "$SCRIPT"

私が抱えている問題は、空のファイルが生成されることです。独自のコードで bash スクリプトを上書きできますか?

4

2 に答える 2

4
cat "$SCRIPT" | ... > "$SCRIPT"

これをしないでください。痛みや苦しみを生むだけです。また、できることなら自己変更コード書かないでください。ただし、必要に応じて、最初に一時ファイルに書き込み、後で名前を変更します。

于 2012-05-23T17:21:40.900 に答える
1

一時ファイルを使用すると、状況を保存できます。

#this get the full path of the script
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/$(basename $0)"

NUMBER=10

#This change only in the first occurrence 
sed "1,/NUMBER=../s/NUMBER=../NUMBER=$((NUMBER + 1))/" "$SCRIPT" > temp.tmp
cat temp.tmp > "$SCRIPT"
rm temp.tmp

しかし、一時ファイルなしで問題を解決する方法があれば、それは本当に興味深いです:)

于 2012-05-23T17:29:21.577 に答える