amrecover
задуман как интерактивный скрипт, поэтому традиционно для его автоматизации можно использовать expect
. Эту утилиту tcl
можно настроить для проверки диалога на наличие двух стилей приглашения (amrecover>
и Продолжить? [Да/нет]:
) и ответа на их по-разному. Например, создайте файл myrecover
в PATH, сделайте его исполняемым (chmod +x myrecover
) и поместите в него следующее:
#!/usr/bin/expect
spawn amrecover my_Config
expect -ex {Continue? [Y/n]:} { send "y\r"; exp_continue } \
-ex {amrecover>} { gets stdin input;
if ![eof stdin] { send $input; send "\r"; exp_continue } }
close
wait
Затем запустите его как
./myrecover </home/me/thatScript
Сценарий expect
разветвляется и запускает вашу команду amrecover my_Config
, подключаясь к ней через pty, а затем прослушивает ввод в поисках двух подсказок. Когда появляется обычное приглашение amrecover>
, мы читаем строку из стандартного ввода сценария expect
, т.е. ваш набор команд, и (если мы не получили end-of- файл) отправьте эту строку в программу с новой строкой (\r
преобразуется в это). exp_continue
снова запускает цикл команд для следующего совпадения приглашения. В конце файла мы закрываем соединение с программой и ждем ее выхода.
Имейте в виду, что запуск amanda
таким образом может привести к хаосу, если запрос на продолжение будет вызван каким-то исключительным состоянием и т.д.
В zsh
вы бы сделали:
files=(*.out_new(n))
(n)
является квалификатором glob, который приводит к числовой сортировке глобуса (, также можно переключать глобально для всех глобусов с помощьюset -o numericglobsort
).
А потом:
do-something-with $files
В bash
, ksh93
илиmksh
(илиzsh
)вы можете хранить файлы, перечисленные этим GNU ls
в массиве с:
eval "list=($(ls -v --quoting-style=shell-always))"
do-something-with "${files[@]}"