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