我是 bash 的新手,正在尝试解决我正在尝试制作的代码的一些问题。
我在我的用户名下的终端并连接到 bash
USER$
USER$ bash
bash$
现在在 bash 中,我保存了一些变量 fe:
i=2
k=2
let p=$k*$i
现在我想在 bash 函数之外使用这些变量
bash$exit
USER$
但现在变量不存在
我尝试使用导出,但它并没有真正起作用,可以使用你的帮助,tnx
我是 bash 的新手,正在尝试解决我正在尝试制作的代码的一些问题。
我在我的用户名下的终端并连接到 bash
USER$
USER$ bash
bash$
现在在 bash 中,我保存了一些变量 fe:
i=2
k=2
let p=$k*$i
现在我想在 bash 函数之外使用这些变量
bash$exit
USER$
但现在变量不存在
我尝试使用导出,但它并没有真正起作用,可以使用你的帮助,tnx
不可能。您不能像这样在父进程中设置环境变量。
与 DOS 批处理文件不同,Unix shell 脚本不能直接影响其调用 shell 的环境。
您可以考虑使用.
(dot) 或source
命令在调用 shell 的上下文中读取和执行脚本。这意味着在脚本中所做的更改确实会影响环境(通常;您仍然可能遇到子 shell 的问题)。
另一种选择是让设置变量的脚本将值以name=value
格式写入一个文件,然后调用脚本读取该文件(使用.
或source
再次)。
传统的解决方案是将设置添加到您的.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
具有在启动远程会话时从本地系统导入环境变量的配置选项。