我(在 mac osx 上)经常使用
export http_proxy=http://192.168.0.205:1099
代理 http 连接以获得更高的下载速度。为了方便起见,我编写了一个名为 proxy.sh 的 shell 文件来执行此操作:
#!/bin/sh
export http_proxy=http://192.168.0.205:1099
在下载之前,我执行了proxy.sh shell命令,但我发现它并没有生效。它在当前commnad窗口(终端)中丢失了http_proxy变量。我必须在当前终端输入导出命令,它才会生效。
所以我想知道这是什么原因和解决方案?谢谢。
最佳答案
“正常”运行 shell 脚本(例如使用 proxy.sh
)会导致该脚本在子进程中运行,因此它不会影响父进程的环境。
使用 .
或 source
将在当前 shell 的上下文中运行 shell 脚本,因此它将能够影响环境, 使用以下之一:
. proxy.sh
source proxy.sh
另一种可能性(如果您至少使用 bash
)是创建一个别名来为您完成工作。你可以使用类似的东西:
alias faster='export http_proxy=http://192.168.0.205:1099'
这样您就可以在命令行上简单地键入 faster
,它将导出该变量(在当前 shell 的上下文中)。
您还可以允许一次性设置,例如:
alias faster='http_proxy=http://192.168.0.205:1099'
然后使用:
faster your_program
这将转化为:
http_proxy=http://192.168.0.205:1099 your_program
这是一种bash
方法,可以为命令的一次 调用设置变量。
关于linux - shell 导出变量没有生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117263/