私は現在、標準のLinuxシステム(現在はUbuntu)にさまざまなプログラムをインストールしてセットアップするbashスクリプトに取り組んでいます。これはプログラムをインストールし、昇格された特権を必要とするさまざまなフォルダーに多数のファイルをコピーするため、標準の「昇格された特権が必要」および終了を既に実行しました。
ただし、可能であれば、ユーザーがSudoパスワードを入力するように要求し、ユーザーがSudoを使用してスクリプトコマンドを実行しない場合(GUIファイルマネージャーから起動するなど)にスクリプトの権限を自動的に昇格できるようにしたいと考えています。ユーザーがスクリプトを再起動する必要はありません。
これはストックLinuxインストールで実行するように設計されているため、システムを変更するオプションは、私の目的には機能しません。すべてのオプションをスクリプト自体に含める必要があります。
これはBash内で可能ですか?もしそうなら、これを行うための最良の(安全でありながら簡潔な)方法は何ですか?
スクリプトから直接Sudo
を実行します。
if [ $EUID != 0 ]; then
Sudo "$0" "$@"
exit $?
fi
これをスクリプトの最初の行として追加します。
[ "$UID" -eq 0 ] || exec Sudo bash "$0" "$@"
グラフィカルプロンプトが必要な場合は、Sudo
をgksu
またはgksudo
に変更します。
私は提案します:
#!/bin/bash
if (($EUID != 0)); then
if [[ -t 1 ]]; then
Sudo "$0" "$@"
else
exec 1>output_file
gksu "$0 $@"
fi
exit
fi
# some example stuff
ls -l /root
echo "app: $0"
for f; do
echo ">$f<"
done
共有しても構わないスクリプトの例::
#!/bin/bash
[ "$UID" -eq 0 ] || exec Sudo "$0" "$@" && echo -n "Sudo bash what: "
read WHAT
Sudo $WHAT
--ImP.TeK