sudo -u user bash 有效,但 $HOME 没有相应更改

sudo -u user bash 有效,但 $HOME 没有相应更改

我正在编写一个脚本来设置新的 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有关系了…………

答案1

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

相关内容