私が経験している問題は、コマンドを入力したとき
su - root
マイシェルスクリプトファイルの先頭に、ユーザーにパスワードの入力を求めるメッセージを表示し、次の手順を実行します。いいえ残りのシェルスクリプトを続行します。その後、端末を介してシェルスクリプトを手動で見つけて実行する必要があります。ユーザーがrootとしてログインしていることを確認してから、残りのシェルスクリプトに進むスクリプトが必要です。
つまり、任意のユーザーでスクリプトを実行したいがスクリプトが実行を開始したら、ユーザーは root に変更し、完了するまで残りのスクリプトを root として実行し続ける必要があります。これは可能ですか?
答え1
これは実装が簡単です。
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"
現在のユーザーがrootでない場合は、スクリプトを再実行してくださいsudo
。
sudo
パラメータを保存できるので、su
ここでは。を使用する場合、su
コマンドは次のようになります。su -c "$0 $@"
スペースまたは特殊シェル文字が含まれていると、引数が破損します。
シェルがbashの場合、外部呼び出しを避けることができますwhoami
。
(( EUID != 0 )) && exec sudo -- "$0" "$@"
答え2
UIDを確認することもできます。
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
答え3
スクリプト自体を呼び出して、次のことを確認できます。
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...
答え4
ログインしたい場所に次のコマンドを追加するだけです。
sudo su
これは私のコードと完全に機能します。