【问题标题】:How to use Unix variables to set and retain values across session {bash} [duplicate]如何使用 Unix 变量在会话 {bash} 中设置和保留值 [重复]
【发布时间】:2014-11-07 23:35:24
【问题描述】:

我需要做这样的事情

  • 使用默认值设置 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

但它仍然提供与第一次运行相同的输出。

【问题讨论】:

  • 将它们写入文件并从文件中读取
  • “每小时”位令人费解(或将成为困难的部分)。您是否正在考虑从cron 运行脚本,或者它应该在您当前的交互式(登录)shell 中运行?您可以将变量设置存储在一个文件中,并使用点.(或source)命令读取该文件。您可以运行其他一些脚本来修改文件中的内容。您可以有一个每小时运行一次的 cron 作业来更新文件。并且每次运行需要环境变量的程序(脚本)时,都可以让脚本读取该文件。
  • envdir 方法很好——有一个专用目录,每个变量一个文件。从这样的目录 (for f in *; do printf -v "$f" %s "$(<"$f")"; done) 轻松填充您的环境,易于修改,易于保存。
  • export 仅导出到您自己的子进程。命名空间并不比这更全局,或更持久。

标签: bash shell unix environment-variables


【解决方案1】:

Shell 变量是按进程存储的,因为每个 shell 脚本都是它自己的进程,因此您不能以这种方式跨进程持久化变量。不过有various ways to communicate between processes

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

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

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

并从中读取:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2013-08-02
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多