linux - shell 导出变量没有生效

标签 linux macos shell unix

我(在 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/

相关文章:

macos - 无法在 MacOS 上安装 TypeScript - 终端错误

python - fatal error : 'mymodule.h' file not found - Cython compile fails to find header

bash - Unix:If/then 语句始终为假

c - 如果子进程在读取时不关闭管道,会发生什么情况?

objective-c - 如何防止Xcode每次都重建项目

bash - 启动并监视 shell 脚本中的进程以完成

linux - 将命令行参数传递给 bash 脚本命令

linux - 在 screen session 中访问 SSH 客户端 IP 地址

linux - 如何阻止访问特定网站

c - 如何检查read系统调用是否读取了整个数据