我已经阅读了其他一些post,在sudo中执行多个命令似乎很麻烦。 Heredocs受限于不能执行stdin / stdout的redirect。 这里无论如何是我想运行的逻辑的一部分,编辑来包含一个特定的问题:在第一个命令中,DIR env var不会超过它的实例吗? 在子shell中有什么正确的方法来实现持久的envvariables?
$ 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.
问题不在于sudo ,而在于你的引用。 使用单引号而不是双引号。
如果你想要一个variables在任何上下文( sudo , ssh等)中被一个子shell解释,你需要转义它的特殊含义,这样它的parsing就不会在当前shell中发生。
这是有效地发送到sudo:
/bin/bash -c (export DIR=/etc/sources.list.d; echo dir is ; mkdir -p ; touch /cloudera.list)