尝试使用 sudo 和 bash 子 shell:环境变量不起作用

尝试使用 sudo 和 bash 子 shell:环境变量不起作用

我读过其他几篇文章,在 sudo 中执行多个命令似乎很麻烦。Heredocs 受到无法重定向 stdin/stdout 的限制。无论如何,这是我想要运行的一部分逻辑,经过编辑以包含一个特定问题:DIR 环境变量在第一个命令中实例化后不会“存活”?在子 shell 中拥有持久环境变量的正确方法是什么?

  $ sudo -- /bin/bash -c "(export DIR=/etc/sources.list.d; echo dir is $DIR; mkdir -p $DIR; touch $DIR/cloudera.list)"

dir is
mkdir: missing operand
Try `mkdir --help' for more information.

答案1

问题不在于sudo,而在于你的引用。使用单引号而不是双引号。

sudo如果您希望某个变量能在任何上下文( 、等)中被子 shell 解释ssh,那么您需要转义其特殊含义,以便其解析不会在当前 shell 中进行。

这实际上被发送给 sudo:

/bin/bash -c (export DIR=/etc/sources.list.d; echo dir is ; mkdir -p ; touch /cloudera.list)

相关内容