shell导出变量不生效
我(在 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窗口(终端)中丢失了http_proxy变量。我必须在当前终端中输入导出命令,它才会生效。
所以我想知道这是什么原因以及解决办法?谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
“正常”运行 shell 脚本(例如使用 proxy.sh)会导致该脚本在子进程中运行,因此不会影响父进程的环境。
使用
.
或source
将在当前 shell 的上下文中运行 shell 脚本,因此它将能够影响环境,使用一个以下内容:另一种可能性(如果您至少使用
bash
)是创建一个别名来为您完成这项工作。您可以使用类似:这样您就可以简单地在命令行上输入
faster
,它将导出该变量(在当前 shell 的上下文中)。您还可以允许一次性设置,例如:
然后使用:
它将转换为:
这是一种为 one 调用设置变量的
bash
方式命令。Running a shell script "normally" (with
proxy.sh
for example) results in that running in a sub-process so that it cannot affect the environment of the parent process.Using
.
orsource
will run the shell script in the context of the current shell, so it will be able to affect the environment, using one of the following:Another possibility (if you're using
bash
at least) is to create an alias to do the work for you. You can use something like:so that you can then simply type
faster
on the command line and it will export that variable (in the context of the current shell).You could also allow for one-shot settings such as:
and then use:
which would translate into:
That's a
bash
way to set a variable for just the one invocation of a command.导出变量仅适用于脚本 - 如果您希望它适用于 shell,您需要使用 source,并像这样执行脚本:
或:
注意“.”。在第一个示例中 - 点后跟空格表示脚本将应用于 shell。
The export variable will only apply to the script -- if you want it to apply to the shell, you need to use source, and execute the script like so:
or:
Note the "." in the first example -- the dot follow by space means the script will apply to the shell.
Drakosha & 已解释了您的脚本不起作用的原因。 Anothony 已经解释了如何使您的脚本发挥作用。但是,通过在脚本中导出,您需要在每次打开新终端时获取脚本。更好的解决方案是在
.bash_profile
或.bashrc
希望这有帮助!
The reason why your script does not work has been explained by Drakosha & how to make your script work has been explained by Anothony. But with the export in the script you need to source your script each time you open a new terminal. A better solution will be to add the export in
.bash_profile
or.bashrc
Hope this helps!
执行 shell 脚本时,将启动一个新 shell,执行脚本,然后 shell 终止。这就是为什么您看不到 shell 中定义的变量的原因。
我建议出于相同目的使用别名。
When executing a shell script a new shell is launched, the script is executed, and the shell dies. That's why you don't see the variable defined in your shell.
I suggest using an alias for the same purpose.