2013-09-27 2 views
0

Мне нужен скрипт для выполнения команд sudo без запроса пароля. В следующих сценариях у меня есть странное Баш stdin поведение:Выполнение команд bash автоматически при sudo не работает

[email protected]:~$ sudo -Si | echo "password" 
password 
[email protected]:~# exit 
[email protected]:~$ sudo -Si | echo "password" 
password 
[sudo] password for rootname: 

(пароль является корневой пароль на моей машине)

Почему пароль не запрашивается в первый раз, и был в второй (и всегда после этого)? Также я не понимаю, как работает stdin в bash, где ошибка в моем коде?

Я знаю, что это очень плохая идея поместить пароль root в команду напрямую, но мне нужно, чтобы он выполнялся правильно.

ответ

0

Может быть, вам следует попробовать:

echo "Password" | sudo -Si 

вместо:

sudo -Si | echo "Password" 

Выход первой команды (до "|") используется в качестве входных данных для второй команды.

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

+0

У меня есть следующий вывод для сценария: ' имя пользователя @ имя пользователя-ноутбук: ~ $ echo "пароль" | sudo -Si' '[sudo] пароль для имени пользователя: stdin: не является tty' – Everv0id

+0

Хм. В этом случае вам придется использовать псевдо-TTY. Для этого требуется либо программирование на языке C, либо существующий скриптовый инструмент (я знаю, что есть один, но я не знаю его имени). –

+0

инструмент называется "ожидать" –

Смежные вопросы