bash——在运行之间存储变量的更好方法?

标签 bash variables text storage

我制作了一个 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

变量只是一个整数,所以文本文件感觉有些过分了。

最佳答案

不需要使用varx 将在当前 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/

相关文章:

bash - 提取值并读取为变量

linux - 在Linux的特定位置添加一行并输出到同一个文件?

linux - 用sed命令改变/etc/hosts

session - 在coldfusion中,什么范围内的变量可以传递到iframe页面?

c# - 将数字数组作为文本传输的大小有效的方法

C++ libcurl -- 从 ftp 下载 txt 文件并保存为字符串

macos - ZSH/Shell 变量赋值/使用

javascript - Internet Explorer 9 无法获取属性错误的值

eclipse - 在 Eclipse 中进行模糊测试? 'Run As..."中基于规则的模糊器

python - 如果符合特定条件,如何从文本文件中查找列中的值总和