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

som*_*ing 2 bash programming shell-script environment-variables 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
Run Code Online (Sandbox Code Playgroud)

问题:

当我对另一个用户 sudo 时, $HOME 变量没有显示/更改这个新用户的主目录。

问题

你能向我解释这个问题吗?

我将如何以最佳和有效的方式做到这一点?

编辑:

为什么我的 cp 命令中总是出现“ cp: cannot stat '': No such file or directory”或“ cp: missing opereand”?我认为它再次与$ HOME有关.......

roa*_*ima 5

here-doc 内容在sudo调用之前进行评估。这意味着 的每个实例$HOME都在调用者的上下文中,而不是sudo. 你可以在这里看到这个:

A=apple
bash <<-EOF
A=banana
echo "$A"
EOF
Run Code Online (Sandbox Code Playgroud)

输出是

apple
Run Code Online (Sandbox Code Playgroud)

如果您引用EOF标记,其内容将被相应引用:

A=apple
bash <<-'EOF'
A=banana
echo "$A"
EOF
Run Code Online (Sandbox Code Playgroud)

输出

banana
Run Code Online (Sandbox Code Playgroud)