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

関連情報