仅在当前 shell 中临时设置代理值

仅在当前 shell 中临时设置代理值

我有一个关于在 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

exportunset 内置(不是命令)只影响 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=

所以你的系统是不受影响通过exportunset在您当前的 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=

相关内容