Введите пароль для команды sudo в цепочке команд - PullRequest
3 голосов
/ 20 мая 2011

В Linux, как я могу ввести пароль для одной из команд в цепочке команд, которая требует sudo.Один из примеров, который я могу вспомнить, это когда после выполнения долгой работы по компиляции я хочу выключить компьютер.

make ; sudo init 0 

Я хочу, чтобы команда выключения выполнялась только после завершения make, но я хотел бы сразу ввести пароль, потому что я не буду там, когда будет выполнена первая команда.Кроме того, я не хочу запускать «make» с привилегиями суперпользователя.Так что переход на root и запуск команд также не обсуждается.

Спасибо!

Ответы [ 6 ]

7 голосов
/ 20 мая 2011
sudo sh -c "su -c 'make' $USER && init 0"

Меняйте свой номер рано и часто.Это чикагский путь!

3 голосов
/ 20 мая 2011

Вы можете запустить sudo -v, чтобы обновить sudo отметку времени - это означает, что вам не нужно будет вводить пароль в течение x минут (по умолчанию 5).Вы можете изменить время ожидания, отредактировав timestamp_timeout в файле sudoers .

Вы также можете изменить свою команду на

make && sudo init 0

, которая будет только закрыватьвниз, если make успешно завершен.

2 голосов
/ 20 мая 2011

Почему бы не передать пароль в sudo?

make; echo 'password' | sudo -S init 0

1 голос
/ 20 мая 2011

Одной из возможностей является использование Expect для автоматизации ввода пароля.

Вот простое руководство по ожиданию и паролям: http://www.linux.com/archive/feed/56066

Другая возможностьотредактируйте ваш / etc / sudoers и настройте своего пользователя на возможность использовать sudo без пароля.если вы проверите файл, это будет объяснено в комментариях там.

0 голосов
/ 20 мая 2011

Вы можете добавить это в файл sudoers

username ALL = NOPASSWD: /sbin/init

, где username - это имя пользователя, которое вы хотите разрешить.

0 голосов
/ 20 мая 2011

Измените тайм-аут для sudo на время, достаточное для вашего использования, затем запустите что-то вроде sudo echo для аутентификации, затем выполните другие ваши команды. Пока тайм-аут пароля не достигнут, он должен выполняться без повторного запроса.

...