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
Другие вопросы по тегам