我对 Bash 脚本还很陌生。我正在尝试编写一个脚本来导出 http_proxy 变量。这是我从终端执行的操作:
$export http_proxy=http://proxy21.iitd.ernet.in:3128/
$export https_proxy=https://proxy21.iitd.ernet.in:3128/
这很好用。现在,这是我的脚本(称为 setproxy):
#!/usr/bin/env bash
if [ $1 -eq 22 ]
then
export http_proxy=http://proxy22.iitd.ernet.in:3128/
export https_proxy=https://proxy22.iitd.ernet.in:3128/
elif [ $1 -eq 21 ]
then
export http_proxy=http://proxy21.iitd.ernet.in:3128/
export https_proxy=https://proxy21.iitd.ernet.in:3128/
elif [ $1 -eq 61 ]
then
export http_proxy=http://proxy61.iitd.ernet.in:3128/
export https_proxy=https://proxy61.iitd.ernet.in:3128/
elif [ $1 -eq 62 ]
then
export http_proxy=http://proxy62.iitd.ernet.in:3128/
export https_proxy=https://proxy62.iitd.ernet.in:3128/
fi
本质上,我想根据输入设置适当的代理服务器。我将其放在 bin 文件夹中,使其可执行,将 bin 添加到路径,登录并退出。终端接受 setproxy 作为有效命令(至少没有命令未找到错误)但是,当我这样做时:
$setproxy 22
没有效果。代理保持不变。我做错了什么?
答案1
调用脚本时,会调用一个新的子 shell 来运行它。它的代理已设置,但父进程(您的 shell)的代理不能从子进程更改。尝试采购脚本,即调用它
. setproxy 21
然后该脚本将被你当前的shell解释。