Назад | Перейти на главную страницу

Создание сценариев (конвейерных) команд в сеансе telnet

Я использую cronjob для выполнения передачи файла на хост, а затем telnet на хост и передаю ему некоторые команды.

HOST=somehost
USER=postgres
PASSWD=blabla
ftp -n -v $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put schema_1.sql
put schema_2.sql
quit
END_SCRIPT

(sleep 20;
 echo "blabla2";
 sleep 5;
 echo "psql -d cb3db -f schema_1.sql";
 echo "psql -d cb3db -f schema_2.sql";
 echo "rm *.sql";
 echo "exit;"
 ) | telnet -l postgres somehost
echo "END OF REMOTE SCRIPT" ||:

Кажется, что все, что я передаю / эхо в сеанс, выполняется параллельно, бывает, что выход выполняется до того, как sql завершит выполнение. Я попытался поставить засыпание перед командой выхода, но это скорее игра в догадки.

Я знаю, что этот подход, безусловно, не самый безопасный из-за паролей и т. Д. Так что, если есть более безопасный и надежный способ выполнить работу, дайте мне знать.

Спасибо за любые подсказки

"ожидать" - обычный способ написания сценария таких взаимодействий.

http://en.wikipedia.org/wiki/Expect

Perl также имеет IPC :: Run который я начинаю использовать после того, как довольно много использовал Expect (в Tcl и perl). Мой IPC::Run код на основе, как правило, короче и легче читается, когда я закончу.

+1 за ожидание.

Однако, если вы похожи на меня, вам будет очень больно использовать tcl (ожидаемый родной язык).

Если вы покопаетесь в статье в Википедии, вы обнаружите, что существуют привязки perl и python (и, конечно, другие) для expect, которые позволяют вам делать все необходимые интерактивные вещи с гораздо меньшими затратами кода.

Удачи.