私が得ている問題は、コマンドを入力すると、
su - root
シェルスクリプトファイルの先頭で、ユーザーにパスワードの入力を求め、次に[〜#〜] not [〜#〜]シェルスクリプトの残りの部分を続行します。次に、ターミナルからシェルスクリプトを手動で見つけて実行する必要があります。スクリプトで、ユーザーがrootとしてログインしていることを確認してから、シェルスクリプトの残りの部分を続行します。
つまり、任意のユーザーとしてスクリプトを実行したいのですが、スクリプトの実行が開始したらすぐに、ユーザーはrootに変更して、完了するまでrootとして残りのスクリプトを続行する必要があります。これはできますか?
これは非常に簡単に実行できます。
#!/bin/sh
[ "$(whoami)" != "root" ] && exec Sudo -- "$0" "$@"
現在のユーザーがrootでない場合は、Sudo
を使用してスクリプトを再実行します。
ここでは、Sudo
ではなくsu
を使用していることに注意してください。これは、引数を保持できるためです。 su
を使用する場合、コマンドはsu -c "$0 $@"
である必要があります。これにより、引数にスペースや特殊なシェル文字が含まれている場合、引数が破損します。
シェルがbashの場合、whoami
への外部呼び出しを回避できます。
(( EUID != 0 )) && exec Sudo -- "$0" "$@"
UIDも確認できます。
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
スクリプト自体を呼び出して、以下を確認できます。
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...
ログインしたい場所で、次のコマンドを追加するだけです
Sudo su
これは私のコードで完全に機能しています