我需要在bash脚本中增加一个变量。 但是在脚本完成之后,应该使用新编号导出变量,并在下次脚本运行时可用。
IN MY SHELL
set x=0
SCRIPT
" If something is true.. do"
export x=$(($x+1)) //increment variable and save it for next time
if [ $x -eq 3 ];then
echo test
fi
exit
答案 0 :(得分:3)
您无法在两个进程之间将变量保留在内存中;该值需要存储在某处并在下次启动时读取。最简单的方法是使用文件。 (支持"通用"变量的fish
shell使用一个单独的进程,它始终在启动和退出时与新shell进行通信。但即便如此,#34; master"当 it 退出时,进程需要使用文件来保存值。)
# Ensure that the value of x is written to the file
# no matter *how* the script exits (short of kill -9, anyway)
x_file=/some/special/file/somewhere
trap 'printf '%s\n' "$x" > "$x_file"' EXIT
x=$(cat "$x_file") # bash can read the whole file with x=$(< "$x_file")
# For a simple number, you only need to run one line
# read x < "$x_file"
x=$((x+1))
if [ "$x" -eq 3 ]; then
echo test
fi
exit
答案 1 :(得分:0)
导出变量只是一种方式。导出的变量将具有shell的所有子进程的正确值,但是当子进程退出时,父进程将丢失更改的值。实际上,父进程只会看到变量的初始值。
这是一件好事。因为所有子进程可能会更改导出变量的值,所以可能会为其他子进程搞乱(如果更改值是双向的)。
你可以做以下两件事之一:
source your-script.bash
或. your-script.bash
。这样,你的
shell不会创建子进程,并且变量会被更改
同样的过程