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 で区切って、高レベルの引用または置換を実行します。