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 回答