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有关.......
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)