2016-07-21 2 views
1

У меня есть текстовый файл с кучей операций, которые я бы хотел отправить с помощью сценария ожидания, который выглядит (заменяя op1 & op2 на команды в моем файле textr, один команда на линию):Как использовать ожидание вместе с сценарием bash

#!/usr/bin/expect 
spawn ssh [email protected] telnet jpaxdp 
expect {\-> } 
send "op1(20)\r" 
expect {\-> } 
send "op2\r" 
expect {\-> } 
send "exit\r" 
expect eof 

Как это сделать?

ответ

1

Я не думаю, что я понимаю ваш вопрос. Мне кажется, проще всего сделать, чтобы ожидать обрабатывать чтения файла:

#!/usr/bin/expect 
set command_file [lindex $argv 0] 
spawn ssh [email protected] telnet jpaxdp 
expect {\-> } 

set fh [open $command_file r] 
while {[gets $fh line] != -1} { 
    send "$line\r" 
    expect {\-> } 
} 
close $fh 

send "exit\r" 
expect eof 

Тогда

+0

Awesome, я не знал, что 'expect' будет есть скриптовые команды, подобные этому! Прекрасно работает! Благодаря! – cerr

+1

Ожидает расширения Tcl, который является языком общего назначения. Этого мало, чего не может сделать. –

0

Вы можете использовать скрипт bash для создания последовательности команд для ожидания и отправки их на него.

Например у вас есть cmds.txt:

echo hello 
echo goodbye 

И следующие Баш скрипт с именем ex.sh:

#!/bin/bash 

echo 'spawn bash' 
while read line; do 
    echo 'expect {$ }' 
    echo send '"'"$line\r"'"' 
done 
echo 'expect {$ }' 
echo 'send "exit\r"' 
echo 'expect eof' 

Так что теперь все, что вам нужно сделать, это использовать трубопроводы, как, что:

cat cmds.txt | bash ex.sh | expect 

Выходы:

[email protected]:/tmp$ cat cmds.txt | bash ex.sh | expect 
spawn bash 
[email protected]:/tmp$ echo hello 
hello 
[email protected]:/tmp$ echo goodbuy 
goodbuy 
[email protected]:/tmp$ exit 
exit 
+0

FRIST, но как это работает с моей связью телнета на удаленном хосте SSH см 'икры 'в моем сценарии выше:' spawn ssh root @ ccTest telnet jpaxdp' – cerr

+0

@cerr Это должно работать из-за псевдо-tty, который кроме эмулирует. Я надеюсь, что если у вас есть основанная на ключах SSH-аутентификация, это должно сработать. Какие проблемы у вас есть? Если есть какие-либо проблемы с ssh, попробуйте добавить параметр -t в ssh – frist

Смежные вопросы