shell导出变量不生效

发布于 2024-12-15 05:21:03 字数 398 浏览 0 评论 0 原文

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

所以我想知道这是什么原因以及解决办法?谢谢。

I (on mac osx) often use

export http_proxy=http://192.168.0.205:1099

to proxy http connection to get a highed download speed. To make things easy, I wrote a shell file named proxy.sh to do this:

#!/bin/sh
export http_proxy=http://192.168.0.205:1099

Before I downlaod, I execute proxy.sh shell command, but I found it did't not come into effect.It lost http_proxy variable in current commnad window(terminal). I must type export command in current terminal,it will come into effect.

So I want to know what's reason for this and a solution? thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

究竟谁懂我的在乎 2024-12-22 05:21:03

“正常”运行 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

这是一种为 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 . or source 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:

. proxy.sh
source proxy.sh

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:

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

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:

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

and then use:

faster your_program

which would translate into:

http_proxy=http://192.168.0.205:1099 your_program

That's a bash way to set a variable for just the one invocation of a command.

在风中等你 2024-12-22 05:21:03

导出变量仅适用于脚本 - 如果您希望它适用于 shell,您需要使用 source,并像这样执行脚本:

. ./proxy.sh

或:

source ./proxy.sh

注意“.”。在第一个示例中 - 点后跟空格表示脚本将应用于 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:

. ./proxy.sh

or:

source ./proxy.sh

Note the "." in the first example -- the dot follow by space means the script will apply to the shell.

愚人国度 2024-12-22 05:21:03

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!

别靠近我心 2024-12-22 05:21:03

执行 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文