我制作了一个 bash 脚本,每小时使用 crontab 运行一次,我需要存储一个变量,以便下次运行时可以访问它。该脚本每次运行时都会更改变量,因此我无法对其进行硬编码。现在我正在将其写入一个 txt 文件,然后再读回。有比这更好的方法吗?我阅读 txt 文件的方式是我在这里找到的,我不明白,而且有点笨拙。没有内置命令吗?无论如何,这里是适用的代码,其中一些变量已更改以使其更易于阅读。
while read x; do
var=$x
done < var.txt
# Do some stuff, change var to a new value
echo $var > var.txt
变量只是一个整数,所以文本文件感觉有些过分了。
最佳答案
不需要使用var
; x
将在当前 shell 的范围内。或者,
read var < var.txt
# do stuff with var
echo $var > var.txt
我建议使用一个简单的文本文件来存储变量。但是,有一个自修改脚本的(非常值得怀疑的)选项。 仅供娱乐!
#!/bin/bash
read val < <( tail -n 1 "$0" )
(( val++ ))
echo "$val"
tmp=$(mktemp /tmp/XXXXXXX)
sed '$s/.*/'$val'/' "$0" > "$tmp"
mv "$tmp" "$0"
exit
0
关键是让倒数第二行成为退出命令,这样它之后的任何内容都不会执行。最后一行是您要保留的变量值。当脚本运行时,它从它自己的最后一行读取
。在它退出之前,它使用 sed
将自己的副本写入一个临时文件,最后一行修改为持久值的当前值。然后我们用临时文件覆盖当前脚本(假设我们有这样做的权限)。
但是认真的吗?不要这样做。
关于bash——在运行之间存储变量的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334495/