Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Unix变量跨会话{bash}设置和保留值_Bash_Shell_Unix_Environment Variables - Fatal编程技术网

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

如何使用Unix变量跨会话{bash}设置和保留值,bash,shell,unix,environment-variables,Bash,Shell,Unix,Environment Variables,我需要这样做 使用默认值设置unix变量 运行一个shell脚本,读取该变量并对其进行处理 在处理时,它可能会也可能不会改变该变量的值 每小时运行一次此脚本,并确保此变量的值现在是上次运行此脚本时设置的值 我主要是寻找如何设置和保留价值。我做了以下事情,但没有成功 export last_build="hello" source .bashrc 然后在我处理这个变量的脚本中 echo $last_build export last_build="hello again" echo

我需要这样做

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

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

Shell变量存储在每个进程中,因为每个Shell脚本都是它自己的进程,所以不能以这种方式跨进程持久化变量。不过,有:

  • 管道
  • 共享内存
  • 消息队列
  • 信号量
  • 档案
  • 出于您的目的,文件似乎是最简单的方法。使用bash写入文件:

    echo $VAR > /tmp/process.tmp.file.txt
    
    从中读到:

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

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