我(在mac osx上)经常使用
导出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窗口(terminal)中丢失了http_proxyvariables。 我必须在当前terminalinputexport命令,才会生效。
所以我想知道这是什么原因和解决scheme? 谢谢。
运行一个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
方式来设置一个变量只是一个命令的调用。
导出变量只适用于脚本 – 如果你想将它应用到shell,你需要使用源代码,并执行脚本,如下所示:
. ./proxy.sh
要么:
source ./proxy.sh
注意“。” 在第一个例子中,空格后面的点表示脚本将应用于外壳。
你的脚本不能正常工作的原因已经由Drakosha解释了,Anothony解释了如何使你的脚本工作。 但是,在脚本中输出时, 每次打开新终端时都需要输入脚本 。 更好的解决方案是将输出添加到.bash_profile
或.bashrc
希望这可以帮助!
当执行一个shell脚本时,一个新的 shell被启动,脚本被执行,并且shell死亡。 这就是为什么你没有看到你的shell中定义的变量。
我建议使用别名出于同样的目的。