私は新しい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