次のコードは、root権限があるかどうかを確認し、それを使用してスクリプトを再実行します。
CMDLN_ARGS="$@" # Command line arguments for this script (if any)
export CMDLN_ARGS
func_check_for_sudo() {
if [ ! $( id -u ) -eq 0 ]; then
echo "You may be asked for your login password for [`whoami`]." ;sleep 1
LAUNCH="`dirname \"${0}\"`"
exec sudo -S su -c ${LAUNCH}/$(basename ${0}) ${CMDLN_ARGS}
exit ${?}
fi
}
問題が発生しているのは、このスクリプトを「$ HOME / bin」フォルダーなどに配置して、パスなしで起動できるようにする場合です。「そのようなファイルやディレクトリはありません」というエラーが表示されます。その情報を取得してexecに正しく渡すためのスクリプトが必要です。
私の質問はこれです:パスなしで呼び出されたときに、スクリプト内から/ path / to / script_nameを正しく取得するにはどうすればよいですか?要約すると、MY_SCRIPT insead / path / to / MY_SCRIPTを呼び出しています。これは、ルート権限をチェックし、ルート権限がない場合は再実行する必要があるため、スクリプトを中断します。
基本的に、問題のコード行は次のとおりです。ここで、$ {0}はスクリプト名です(パスを使用して呼び出した場合はパスを使用)。
exec sudo -S su -c ${0} ${CMDLN_ARGS}