Bash скрипт для 'apt-get update' с автоматически вставляемым паролем
Я хочу сделать скрипт оболочки для запуска sudo apt-get update
, автоматически введите пароль для sudo
и автоматически нажмите клавишу ввода.
Я пробовал:
#!/bin/bash
sudo apt-get update
expect "[sudo] password for username: "
send "password"
2 ответа
Решение
Вы можете сделать с
#!/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