在 shell 中設定的變數不會在「bash -c 'command'」中讀取

在 shell 中設定的變數不會在「bash -c 'command'」中讀取

輸入:

sudo bash -c '>> /media/$USER/rootfs/etc/profile'

輸出:

bash: /media/root/rootfs/etc/profile: No such file or directory

輸入:

TEST=$USER
sudo bash -c '>> /media/$TEST/rootfs/etc/profile'

輸出:

bash: /media//rootfs/etc/profile: No such file or directory

代替:

/media/riccardo/rootfs/etc/profile

我該如何解決這個問題?

答案1

預設情況下,Shell 變數不會匯出到從 shell 啟動的命令。

您需要明確地使用 來執行此操作export,例如:

$ export test=foo
$ bash -c 'echo test=$test'
test=foo

除了sudo在將環境傳遞給 之前仍可能清理環境之外bash,因此您可能需要使用命令列參數:

$ test=foobar 
$ sudo bash -c 'echo "$1"' sudo_bash "$test"
foobar

這裡不需要export,它sudo_bash只是一個用作該內殼“名稱”的字串,如果該-c字串有語法錯誤,您就會看到它。

也可以看看:

答案2

引用問題

sudo bash -c '>> /media/'"$USER"'/rootfs/etc/profile'
test=$USER
sudo bash -c '>> /media/'"$test"'/rootfs/etc/profile'

''引號是文字,""引號允許變數擴展。我已經使用了兩者,將它們連接在一起。如果我只使用它也會起作用""

相關內容