使用sudo保留内联变量

时间:2017-05-09 10:39:36

标签: linux bash environment-variables sudo

嗨,我试图让这样的东西在bash中运作

$ http=xx sudo echo $http
xx

但我一直都是空行,到目前为止唯一有用的是:

$ export http=xx
$ sudo -E echo $http
xx

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

我也按建议here

尝试了这个
$ sudo http=xx echo $http

但没有运气,我错过了什么?

2 个答案:

答案 0 :(得分:1)

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

$ http=xx sudo echo $http

尝试改为

$ http=xx sudo -E bash -c 'echo $http'

语法在man env

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

          name=value ... utility [ argument ... ]

否则,如果目标不影响当前的shell环境,则可以在子shell中完成export和sudo命令:

$ ( export http=xx ; sudo -E 'echo $http' )

答案 1 :(得分:-1)

在我看来,它与已经讨论过的案例非常相似:

如果你这样做:

sudo http=xx su root -c 'echo "$http"'

试着看看这里 https://unix.stackexchange.com/questions/202383/how-to-pass-environment-variable-to-sudo-su