質問: 一部のコマンドをスーパーユーザーとして実行し、一部のコマンドをスーパーユーザーとして実行せずに、ベビーシッターを行わずにシェルスクリプトを作成する方法 一連のコマンドを自動化するシェルスクリプトを作成したいと思います。問題は、一部のコマンドをスーパーユーザーとして実行する必要があり、一部のコマンドをスーパーユーザーとして実行してはならないことです。これまでに行ったことは、次のようなものです。#!/bin/bash command1 sudo command2 command3 sudo command4 問題は、これは、誰かがcommand1が完了するまで待ってからパスワードの入力を求められることを意味します。その後、command3に十分な時間がかかる場合、command3が完了するのを待たなければなりません。その人が立ち上がって立ち去り、1時間後に戻って完了できたらいいですね。たとえば、次のスクリプトにはこの問題があります。#!/bin/bash sleep 310 sudo echo "hi, i'm root" sleep 310 sudo echo "i'm still root?" ユーザーが最初に一度だけパスワードを入力し、その後立ち去ることができるようにするにはどうすればよいですか?更新:回答ありがとうございます。 mac os x lionで実行していて、stephen pのスクリプトを実行すると、異なる結果が得られました($ homeも追加しました)pair@abbey scratch$ ./test2.sh uid is 501 user is pair username is home directory is /users/pair pair@abbey scratch$ sudo ./test2.sh password: uid is 0 user is root username is root home directory is /users/pair
回答: スクリプト全体をスーパーユーザーとして実行する必要があります。一部のコマンドを非スーパーユーザーとして実行する場合は、sudoの「-u」オプションを使用します。#!/bin/bash sudo -u username command1 command2 sudo -u username command3 command4 rootとして実行する場合、sudoはパスワードを要求しません。