如何使用Unix变量在会话间设置和保留值 {bash}

5

我需要像这样做:

  • 设置一个带有默认值的Unix变量。
  • 运行一个读取该变量并处理它的shell脚本。
  • 在处理过程中,它可能会更改该变量的值,也可能不更改。

每小时运行此脚本,并确保该变量的值现在是上次运行此脚本设置的值。

我主要想知道如何设置和保留值。我尝试了以下方法,但没有成功。

export last_build="hello"
source .bashrc

然后在处理这个变量的脚本中

echo $last_build     
export last_build="hello again"
echo $last_build

当我运行这个脚本时,我会得到类似以下的结果。
hello    
hello again

当我第二次运行时,我期望输出结果为:
hello again
hello again

但它仍然会产生与第一次运行相同的输出。

将它们写入文件并从文件中读取。 - that other guy
'每小时'这一部分让人困惑(或者说是最难的部分)。你是打算从cron中运行脚本,还是在当前的交互式(登录)shell中运行?你可以将变量设置存储在一个文件中,并使用点号.(或source)命令来读取该文件。你也可以运行其他修改文件内容的脚本。你可以设置一个每小时运行的cron作业来更新该文件。每次运行需要环境变量的程序(脚本),你都可以让脚本读取那个文件。 - Jonathan Leffler
envdir方法是一个好的方法——有一个专门的目录,每个变量对应一个文件。从这样的目录中填充您的环境很容易(for f in *; do printf -v "$f" %s "$(<"$f")"; done),修改也很容易,保存也很容易。 - Charles Duffy
export 只会导出到 你自己的子进程。该命名空间不比此更全局或更持久。 - Charles Duffy
1个回答

9

Shell变量是按进程存储的,因为每个shell脚本都是自己的进程,因此无法通过这种方式在进程之间保留变量。不过,有各种方法来进行进程间通信

  1. 管道
  2. 共享内存
  3. 消息队列
  4. 信号量
  5. 文件

对于您的目的而言,似乎文件是最简单的方法。使用bash写入文件:

echo $VAR > /tmp/process.tmp.file.txt

并从中读取:

export VAR=`cat /tmp/process.tmp.file.txt`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接