使用 sudo 保留内联变量

dav*_*ubz 4 linux bash sudo environment-variables

嗨,我正在尝试让这样的东西在 bash 中工作

$ http=xx sudo echo $http
xx
Run Code Online (Sandbox Code Playgroud)

但我不断收到空行,到目前为止唯一有效的是:

$ export http=xx
$ sudo -E echo $http
xx
Run Code Online (Sandbox Code Playgroud)

我想要实现的是能够为 sudo 命令内联变量

我也按照这里的建议尝试过这个

$ sudo http=xx echo $http
Run Code Online (Sandbox Code Playgroud)

但运气不好,我错过了什么吗?

Nah*_*eul 5

第一个命令的问题是http变量扩展发生在设置之前。

$ http=xx sudo echo $http
Run Code Online (Sandbox Code Playgroud)

尝试一下

$ http=xx sudo -E bash -c 'echo $http'
Run Code Online (Sandbox Code Playgroud)

语法描述于man env

   Some have suggested that env is redundant since the same effect is achieved by:

          name=value ... utility [ argument ... ]
Run Code Online (Sandbox Code Playgroud)

否则,如果目标不是影响当前 shell 环境,则可以在子 shell 中执行导出和 sudo 命令:

$ ( export http=xx ; sudo -E 'echo $http' )
Run Code Online (Sandbox Code Playgroud)