Intereting Posts
Как предотвратить видеодрайвер модуля ядра для проверки конкретного устройства графической карты Debian 8 – ядро ​​с vserver – apt не может найти пакеты {exec} заставляет Conky остановиться Как использовать `smart-compile` без подтверждения в Emacs имя хоста: имя или услуга неизвестны Клиент LDH RHEL6 не перечисляет все группы Создание раздела с использованием разделенных вместо fdisk Процесс работает только в одном процессоре Удаление файлов с помощью регулярного выражения Запустите Ubuntu 10.04 LTS с помощью Apache2 SSL с парольной фразой W: Целевые переводы Как я * полностью * отключить ярлык Ctrl-O в Midnight Commander? Монетный двор 13: Возможно ли пропустить стандартное диалоговое окно пароля для входа в систему с помощью маятника с ключом Программное обеспечение OCR для уравнений для получения файла LaTeX Как определить, является ли цель софт-ссылки каталогом или файлом?

сценарии оболочки, которые отвечают на вывод консоли

Отказ от ответственности :: Я не активный скриптовый скрипт

Как создать сценарий, который отвечает на вывод консоли? Например, я пытаюсь настроить cron, который периодически изменяет svnsync на мой репозиторий на сервер резервного копирования каждую полночь. Проблема заключается в том, что для синхронизации требуется запрос авторизации.

svnsync sync не принимает никаких параметров для указания входа, поэтому простая команда cron отсутствует. Я считаю, что могу запустить скрипт, но я пытаюсь понять, как заставить его реагировать на вывод консоли.

Например:

ken@server:~$ svnsync sync https://svn3.backup.net/svn/mirror Authentication realm: <https://svn3.backup.net/svn/mirror:443> backup.net Subversion Backup Password for 'ken': ***<send return key>*** Username:***<specify backup.net username>*** Password for '<the name>':***<specify password for username>*** <It proceeds to check out> 

где ***< message >*** – это действие, на которое я хочу, чтобы скрипт отвечал.

Я был в сомнении, когда вы сказали: «svnsync sync не принимает никаких параметров для указания входа», поэтому я проверил документацию и угадал, что она делает :

 --source-password --source-username --sync-password --sync-username 

Этим вариантам должно быть достаточно, чтобы вы могли вернуться к простому сценарию cron.

Вернемся к случаю, когда вы действительно не можете указать такие параметры, все же легко написать сценарий оболочки, который отправляет данные в stdin программы. Например, может работать следующее (где program – это программа, которую вы хотите запустить, а text – это файл, в котором вы храните текст для отправки в программу):

 program < text 

Однако для аутентификации программы часто записываются в готовый с tty а не из stdin (по соображениям безопасности). Я не знаком с этим, но в этом случае вы все равно можете создать поддельный терминал. В этом случае expect ожидание.

expect может помочь.

Есть учебник O'Reilly .

Кроме того, это означает, что в некоторых сценариях пароли становятся ясными.
Не очень хорошая идея.

У svnsync нет параметров для ssh-ключей?

Два аналогичных решения:

  • expect (как дано другими ответами), что требует TCL.
  • pexpect , написанный на чистом Python.