qic*_*ren 4 unix linux macos 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
Run Code Online (Sandbox Code Playgroud)
在我下载之前,我执行proxy.sh shell命令,但我发现它没有生效.它在当前的commnad窗口(终端)中丢失了http_proxy变量.我必须在当前终端输入export命令,它才会生效.
所以我想知道这是什么原因和解决方案?谢谢.
"正常"(proxy.sh例如)运行shell脚本会导致在子进程中运行,从而不会影响父进程的环境.
使用.或source将运行在当前shell的上下文中的shell脚本,所以它会能够影响环境,使用下列之一:
. proxy.sh
source proxy.sh
Run Code Online (Sandbox Code Playgroud)
另一种可能性(如果你bash至少使用的话)是创建一个别名来为你完成工作.您可以使用以下内容:
alias faster='export http_proxy=http://192.168.0.205:1099'
Run Code Online (Sandbox Code Playgroud)
这样你就可以直接输入faster命令行,它将导出该变量(在当前shell的上下文中).
您还可以允许一次性设置,例如:
alias faster='http_proxy=http://192.168.0.205:1099'
Run Code Online (Sandbox Code Playgroud)
然后使用:
faster your_program
Run Code Online (Sandbox Code Playgroud)
这将转化为:
http_proxy=http://192.168.0.205:1099 your_program
Run Code Online (Sandbox Code Playgroud)
这是为一个命令bash的一次调用设置变量的方法.
导出变量仅适用于脚本 - 如果要将其应用于shell,则需要使用source,并执行脚本,如下所示:
. ./proxy.sh
Run Code Online (Sandbox Code Playgroud)
要么:
source ./proxy.sh
Run Code Online (Sandbox Code Playgroud)
注意"." 在第一个示例中 - 按空格跟表示脚本将应用于shell.