我有一个关于在 unix 操作系统中设置代理值的问题。我想暂时应用当前正在运行的 shell 的代理设置,并且不应影响系统范围的代理设置,因为我在那里使用了另一个值。
我正在运行以下命令
export HTTPS_PROXY=abc.com:9900
newman run <command goes on> //npm command
unset HTTPS_PROXY
但这也会取消设置整个系统代理。任何线索如何在当前 shell 中作为唯一的本地环境执行此操作
答案1
您可以执行如下命令:
HTTPS_PROXY=abc.com:9900 newman run <command goes on> //npm command
这将仅为此进程的运行设置变量
答案2
问题在于 HTTPS_PROXY 变量可能在启动时设置,因此当您使用以下方法清除它时
unset HTTPS_PROXY
直到您重新启动(或者可能注销/登录)它才会再被填充。
一个简单的解决方案就是保存当前的临时变量中的值,然后在完成后恢复它,即:
export TMP_HTTPS=$HTTPS_PROXY
export HTTPS_PROXY=abc.com:9900
newman run <command goes on> //npm command
export HTTPS_PROXY=$TMP_HTTPS
unset TMP_HTTPS
由于每次执行此操作都非常繁琐,因此更好的解决方案是添加具有正确全球的代理到你的.bashrc
或.bash_profile
。这样,每次你打开一个新 shell 时,你都会有正确的一个。
但这有一个缺点,就是可能会引发冲突。
另一个解决方案是创建一个 bash功能使用变量的本地覆盖HTTPS_PROXY
(如解释的那样这里)。 就像是:
my_custom_newman() {
local HTTPS_PROXY=abc.com:9900
newman run <command goes on> //npm command
}
答案3
和export
unset
内置(不是命令)只影响 bash 的当前实例及其子实例!
该$HTTPS_PROXY
变量通常通过/etc/environment
(系统漏洞)或在 本地设置~/.bashrc
。如果您的系统具有始终设置的代理变量,您可以在当前 shell 或子 shell 中修改它:
# Show current proxy settings
$ echo proxy=$HTTPS_PROXY
proxy=http://localhost:3128/
# Proxy setting in new shell (important use singel quotes):
$ bash -c 'echo proxy=$HTTPS_PROXY'
proxy=http://localhost:3128/
# Unset proxy in new shell:
$ bash -c 'unset HTTPS_PROXY; echo proxy=$HTTPS_PROXY'
proxy=
所以你的系统是不受影响通过export
或unset
在您当前的 shell 中。
正如另一个答案所建议的那样,您始终可以修改每个命令的 shell 变量,并且大多数工具将不会使用代理设置(如果$HTTP(S)_PROXY
为空):
# Empty proxy variable for bash command
$ HTTPS_PROXY= bash -c 'echo proxy=$HTTPS_PROXY'
proxy=
# Or clear all proxy variables
HTTP_PROXY= HTTPS_PROXY= bash -c 'echo proxy=$HTTPS_PROXY'
proxy=