OSXとLinuxの両方のライブラリをコンパイルしてインストールするBashインストーラスクリプトを作成しています。スクリプト内の一部のコマンド(「make install」、「apt-get install」、「port install」など)ではSudoが必要なので、ユーザーにパスワードを指定する必要があります。
現在、ユーザーは最初のSudoコマンドを実行しようとするたびにパスワードの入力を求められますが、これは多くの場合コンパイルステージの後であるため、スクリプトを開始してからパスワードを入力するまでの間に常に時間があります。
スクリプトの最初にパスワードエントリ+チェックを配置したいと思います。また、これが本当にシステムライブラリをインストールする適切な方法であるかどうかも知りたいです。
または、Sudoを必要としないローカルのサンドボックスの場所にライブラリをインストールすることもできますが、apt-getとmacportsに、デフォルトの/ usr/local /と/ opt/local以外のライブラリをインストールする場所を指示する必要があります、それを行う方法も、それが賢いアイデアかどうかもわかりません。
パスワードを取得するには、Sudo echo "Thanks."
スクリプトの先頭。
しかし、私はこの解決策を好みます:
if [[ $UID != 0 ]]; then
echo "Please run this script with Sudo:"
echo "Sudo $0 $*"
exit 1
fi
スクリプト全体を昇格させたくない場合(必要に応じてスクリプト内でSudoのみを使用してリスクを制限するため)、受け入れられた回答の最初の部分Sudo echo "Thanks"
は機能しますが、スクリプトを終了してSudoパスワードの失敗に応答しません。これを実現するために、Sudoコマンドを含み、使用前にSudoアクセスを確実にしたいスクリプトは、
if [[ ! $(Sudo echo 0) ]]; then exit; fi
警告は、残りのプロンプトを抑制するために、スクリプトの期間中続くsudoersタイムアウトの存在に依存していることです。
それについて進む別の方法:
function checkSudo() {
if ((EUID != 0)); then
echo "Granting root privileges for script ( $SCRIPT_NAME )"
if [[ -t 1 ]]; then
Sudo "$0" "$@"
else
exec 1>output_file
gksu "$0" "$@"
fi
exit
fi
}
少し読みやすいかもしれません:
[ $(whoami) == "root" ] || exit