update post: 为单一命令设置代理环境变量的终端函数

This commit is contained in:
leafee98 2023-02-22 22:23:50 +08:00
parent e0f41295db
commit 8e75de2275

View file

@ -33,11 +33,27 @@ function proxyenv {
HTTPS_PROXY=${proxy_dest} HTTPS_PROXY=${proxy_dest}
export proxy http_proxy https_proxy PROXY HTTP_RPOXY HTTPS_PROXY export proxy http_proxy https_proxy PROXY HTTP_RPOXY HTTPS_PROXY
eval "$@" "$@"
) )
} }
``` ```
> Update: 注意最后一条命令现在是 `"$@"` 而不是以前的 `eval "$@"`,这样才能够避免括号产生额外的意义。
>
> 在 Bash 下使用 `help eval` 可以看到 `eval` 的作用,其会将所有作为参数的字符串合并为一个,然后直接传递给 shell 运行,所以这些字符串会再一次经过变量代换、命令行代换、引号移除等**展开**过程。
>
> ```
> $ help eval
> eval: eval [arg ...]
> Execute arguments as a shell command.
>
> Combine ARGs into a single string, use the result as input to the shell,
> and execute the resulting commands.
>
> Exit Status:
> Returns exit status of command or success if command is null.
> ```
### 针对 sudo 命令 ### 针对 sudo 命令
在使用 `sudo` 命令时,它的默认行为是不保留任何当前 shell 下的环境变量,因此即便使用 `proxyenv sudo wget` 命令,也无法在 `wget` 中使用这些环境变量。一个临时的解决方案是使用 `sudo``--preserve-env` 参数,像下面这样 在使用 `sudo` 命令时,它的默认行为是不保留任何当前 shell 下的环境变量,因此即便使用 `proxyenv sudo wget` 命令,也无法在 `wget` 中使用这些环境变量。一个临时的解决方案是使用 `sudo``--preserve-env` 参数,像下面这样