2012-05-28 148 views
0

我是bash的新手,并试图解决一些问题,我正在尝试编写代码。保存全局变量BASH

我是在我的用户名在终端和连接到来砸

USER$ 
USER$ bash 
bash$ 

现在在bash我节省了一些变量FE:

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

现在我想在室外使用这些变量bash函数

bash$exit 
USER$ 

但是现在变量不存在

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

回答

2

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

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

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

3

不可能。你不能像这样在父进程中设置环境变量。

+0

好的,在我的操作过程中,我需要移动4个不同的服务器,每当我需要变量时,你会推荐什么? – jarhead

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具有用于在启动远程会话时从本地系统导入环境变量的配置选项。