スクリプトのsudo / EOF句内でスクリプト変数と環境変数にアクセスする方法... BASH

スクリプトのsudo / EOF句内でスクリプト変数と環境変数にアクセスする方法... BASH

質問:

cp変数が存在しないため、常にエラーが発生するこの問題で問題が発生しています。

これは私のコードです。

if [ ! -z "$USER1" ]
then
     sudo -u "$USER1" bash <<'EOF'
     sleep 5
     BASHRC=.bashrc
     cp "$BASHRC" "$HOME"/.bashrc
     sleep 5
     wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O "$HOME"/.dircolors
     sleep 5
     echo 'eval $(dircolors -b $HOME/.dircolors)' >> "$HOME"/.bashrc
     . "$HOME"/.bashrc
     sleep 5
     echo "Here is LS_COLORS in action: "
     ls -l "$HOME"
EOF
fi

質問:

sudo句(多く)でスクリプト変数と環境変数にアクセスできるようにするにはどうすればよいですか?

この問題があるのはsudoまたはhere-documentですか?

編集する:

EOFから引用符を削除すると、以前の問題が発生しました。

./testing3892739.sh billy
cp: failed to access '/root/.bashrc': Permission denied

編集2:

スクリプトは次のようになります...

    if [ ! -z "$USER1" ]
108 then
109     sudo -i -u "$USER1" bash <<'EOF'
110     sleep 5
111     cp -f .bashrc "$HOME"/.bashrc
112     sleep 5
113     wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O "$HOME"/.dircolors
114     sleep 5
115     echo 'eval $(dircolors -b $HOME/.dircolors)' >> "$HOME"/.bashrc
116     . "$HOME"/.bashrc
117     sleep 5
118     echo "Here is LS_COLORS in action: "
119     ls -l "$HOME"
120 EOF
121 fi

スイッチは過去の問題-iに影響を与えましたsudo...しかし、いつものように時間がかなり経過し、さまざまなエラーが発生しましcp間違いそれ

cp: '.bashrc' and '/home/billy/.bashrc' are the same file

ファイルは存在しますが上書きする必要があります。

cp私はスクリプトがあるディレクトリであり、サーバーを更新するために必要なファイルが存在する場合は上書きされるので、現在隠されているファイルからどこでも私のスクリプトを使用できるようにしたいです。.bashrcdir$HOME

ベストアンサー1

したがって、(コメントに基づいて)呼び出しディレクトリのファイルを.bashrc参照するのではなく、ターゲットユーザーのホームディレクトリに展開しようとしています。私sudo$HOME考えるこれを行うには、次の方法を使用します-H

 -H, --set-home
             Request that the security policy set the HOME environment
             variable to the home directory specified by the target user's
             password database entry.  Depending on the policy, this may
             be the default behavior.

表示するには:

$ sudo -Hu testuser bash -c 'echo \$PWD = $PWD; echo \$HOME = $HOME' 
$PWD = /home/steeldriver/forums/tests
$HOME = /home/testuser

そして、「一般的な」sudo $HOME解析は呼び出し側のユーザの解析です。

$ sudo -u testuser bash -c 'echo \$PWD = $PWD; echo \$HOME = $HOME'
$PWD = /home/steeldriver/forums/tests
$HOME = /home/steeldriver

ログインシェルがターゲット$HOMEユーザーのログインシェルとして解決されますが、作業ディレクトリも変更されます。

$ sudo -iu testuser bash -c 'echo \$PWD = $PWD; echo \$HOME = $HOME'
/home/testuser = /home/testuser
/home/testuser = /home/testuser

どちらもあなたのアプリケーションにはあまり役に立ちません。

これはsudo完全に設定可能で、デフォルトの動作はUnix / Linuxの特定のバージョンとディストリビューションによって異なります。

おすすめ記事