Shell

嘗試將 sudo 與 bash 子shell 一起使用:環境變數不起作用

  • March 10, 2013

我已經閱讀了其他一些文章,在 sudo 中執行多個命令似乎很麻煩。Heredocs 受到無法重定向標準輸入/標準輸出的限制。無論如何,這裡是我想要執行的邏輯的一部分,經過編輯以包含一個特定問題:DIR env var 在第一個命令中的實例化之後沒有“存活”?在子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.

問題不在於sudo,而在於您的引用。使用單引號而不是雙引號。

如果您希望某個變數在任何上下文( 、 等)中由子 shell 解釋sudossh則需要轉義其特殊含義,以便其解析不會在目前 shell 中發生。

這實際上被發送到 sudo:

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

引用自:https://serverfault.com/questions/486356