Bash

sudo -u user bash 有效,但 $HOME 沒有相應改變

  • August 18, 2018

我正在編寫一個腳本來設置新的 debian 安裝。問題出在這段程式碼中:

if [ ! -z "$USER1" ]
then
   sudo -u "$USER1" bash <<-EOF
   cp "$BASHRC $HOME"/.bashrc
   wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O "$HOME"/.dircolors
   echo 'eval $(dircolors -b $HOME/.dircolors)' >> "$HOME"/.bashrc
   . "$HOME"/.bashrc
   echo "Here is LS_COLORS in action: "
   ls -l "$HOME"/ 
EOF

問題:

當我對另一個使用者執行 sudo 時,$HOME 變數沒有顯示/更改這個新使用者的主目錄。

問題

你能給我解釋一下這個問題嗎?

我將如何以最好和最有效的方式做到這一點?

編輯:

為什麼我的 cp 命令中不斷出現“ cp: cannot stat '': No such file or directory”或“ cp: missing opereand”?我認為這與 $HOME 再次有關…………

here-doc 內容在sudo呼叫之前進行評估。這意味著 的每個實例$HOME都在呼叫者的上下文中,而不是sudo. 你可以在這裡看到這個:

A=apple
bash <<-EOF
A=banana
echo "$A"
EOF

輸出是

apple

如果你引用你的EOF標記,它的內容將被相應地引用:

A=apple
bash <<-'EOF'
A=banana
echo "$A"
EOF

輸出

banana

引用自:https://unix.stackexchange.com/questions/463282