保存全局变量BASH

时间:2012-05-28 05:33:40

标签: bash variables export global-variables

我是bash的新手,并尝试为我正在尝试制作的代码解决一些问题。

我在我的用户名下的终端并连接到bash

USER$  
USER$ bash  
bash$

现在在bash中我保存了一些变量f.e:

i=2   
k=2   
let p=$k*$i

现在我想在bash函数之外使用那些变量

bash$exit   
USER$

但现在变量不存在

我尝试使用导出,但它没有真正起作用,可以使用你的帮助,tnx

3 个答案:

答案 0 :(得分:3)

不可能。您不能在父流程中设置环境变量,如下所示。

答案 1 :(得分:2)

与DOS批处理文件不同,Unix shell脚本不能直接影响其调用shell的环境。

您可以考虑使用.(点)或source命令在调用shell的上下文中读取和执行脚本。这意味着脚本中所做的更改会影响环境(通常情况下,您仍然会遇到子shell问题)。

另一种方法是让设置变量的脚本将name=value格式的值写入调用脚本然后读取的文件(再次使用.source)。

答案 2 :(得分:1)

传统解决方案是将设置添加到.profile. bashrc - 您应该使用这些设置取决于您的特定需求和本地Bash配置;我的第一个推荐是.profile,但是你必须避免使用任何bashisms,因为这个文件是与sh共享的(例如,没有let)。

有关更具体的需求,请将命令放在文件中,并在需要时source。您可能还想创建一个简单的脚本来使用当前值更新文件。

# source this file to update $HOME/stuff

cat<<HERE>$HOME/stuff
i='$i'
k='$k'
p='$p'
export i k p
HERE

要在连接到远程系统时保留变量,请查看用于连接的工具的文档。例如,ssh具有用于在启动远程会话时从本地系统导入环境变量的配置选项。