На этот вопрос уже есть ответ здесь:
Я хочу сделать shell-скрипт, который будет запускать sudo apt-get update
, автоматически вводить пароль для sudo
и автоматически нажимать клавишу Enter.
Я пробовал:
#!/bin/bash
sudo apt-get update
expect "[sudo] password for username: "
send "password"
Можно сделать с
#!/bin/bash
echo password | sudo -S apt-get update
От man sudo
и от Stackoverflow
-S
,--stdin
Запись подсказка к стандартной погрешности и считать пароль из стандартного входа вместо того, чтобы использовать оконечное устройство. Пароль должен сопровождаться символом новой строки.
, Если Ваш пароль имеет специальные символы затем, используют одинарные кавычки вокруг пароля как echo 'p@ssowrd'
.
Вы получили верную мысль, использование expect
является правильным инструментом. Однако Ваш синтаксис является неправильным. Попробуйте следующее:
#!/bin/bash
#some instructions ....
#the <<-EOD ... EOD syntax is called a "heredoc" and allows to send multiple instructions to a command
expect <<-EOD
#process we monitor
spawn sudo apt-get update
#when the monitored process displays the string "[sudo] password for username:" ...
expect "[sudo] password for username:"
#... we send it the string "password" followed by the enter key ("\r")
send "password\r"
#we exit our expect block
EOD