遡ってスクリプトをrootとして実行するにはどうすればよいですか?

遡ってスクリプトをrootとして実行するにはどうすればよいですか?

root権限で実行する必要があるシェルスクリプトを作成しています。

ユーザーがroot権限を持っているかどうかを確認できますが、ユーザーの資格情報はまだキャッシュされていますが、それを介して自分のスクリプトを呼び出さないsudo -nv || echo "no sudo"場合は役に立ちません。sudoしたがって、ユーザーに反応できず、sudoを使用してスクリプトを呼び出すことはできません。

これを必要とするすべてのコマンドの前に配置できるので、sudoユーザーにroot権限があることを確認するだけで十分ですが、私の考えにはより良い解決策が必要です。

ユーザーにroot権限を提供するように要求し、提供されている場合は、ユーザーが最初にroot権限で呼び出したように、残りのスクリプトを実行するスクリプトに入れることができるコマンドを探しています。

私が望むもの:

#!/bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

mv /bin/cmd1 /bin/cmd2    # requires root

2回修正

答え1

あなたがルートかどうかテスト、そうでない場合はrestartを使用してくださいsudo。たとえば、次のようになります。

#! /bin/bash

if [[ $EUID -ne 0 ]];
then
    exec sudo /bin/bash "$0" "$@"
fi

答え2

 #!/bin/sudo /bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

She-bangはシェルにのみ適用されません。このファイルは、実行可能ファイルと同様にカーネルによってアクセスされます。カーネルは先行する「#!」を最初のエントリを実行するインジケータとして解釈し、その後のエントリを新しいプロセスに個々の引数として渡します。また、スクリプトファイルパスをプロセスにargv [2]として渡すように設定します。

カーネルは、スペース、タブ、改行、null で区切って、高レベルの引用または置換を実行します。

関連情報