質問:
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
私はスクリプトがあるディレクトリであり、サーバーを更新するために必要なファイルが存在する場合は上書きされるので、現在隠されているファイルからどこでも私のスクリプトを使用できるようにしたいです。.bashrc
dir
$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の特定のバージョンとディストリビューションによって異なります。