linux – shell导出变量不生效

我(在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变量.我必须在当前终端输入export命令,它才会生效.

所以我想知道这是什么原因和解决方案?谢谢.

最佳答案
“正常”运行shell脚本(例如使用proxy.sh)会导致在子进程中运行,从而不会影响父进程的环境.

用.或者source将在当前shell的上下文中运行shell脚本,因此它将能够使用以下方法之一来影响环境:

. proxy.sh
source proxy.sh

另一种可能性(如果你至少使用bash)是创建一个别名来为你完成工作.您可以使用以下内容:

alias faster='export http_proxy=http://192.168.0.205:1099'

这样你就可以在命令行上更快地键入它,然后它将导出该变量(在当前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导出变量不生效 - 代码日志