Как написать сценарий оболочки, который запускает некоторые команды от имени суперпользователя и некоторые команды не от имени суперпользователя, не присматривая за ним?

Я хочу написать сценарий оболочки для автоматизации ряда команд. Проблема в том, что некоторые команды ДОЛЖНЫ выполняться от имени суперпользователя, а некоторые НЕ ДОЛЖНЫ выполняться от имени суперпользователя. До сих пор я делал что-то вроде этого:

#!/bin/bash

command1
sudo command2
command3
sudo command4

Проблема в том, что это означает, что кто-то должен дождаться завершения команды 1, прежде чем ему будет предложено ввести пароль, а затем, если команда 3 будет выполняться достаточно долго, ему придется ждать завершения команды 1. команда3 для завершения. Было бы неплохо, если бы человек мог встать и уйти, а потом вернуться через час и покончить с этим. Например, у следующего сценария есть такая проблема:

#!/bin/bash

sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"

Как мне сделать так, чтобы пользователь мог просто ввести свой пароль один раз в самом начале, а затем уйти?

Обновление:

Спасибо за ответы. Я работаю в Mac OS X Lion и запустил сценарий Стивена П. и получил разные результаты: (я также добавил $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
57
задан speedarius 19 April 2012 в 19:24
поделиться