#exec #tcl #expect
#exec #tcl #ожидать
Вопрос:
Я пишу свой первый expect script, поэтому, возможно, я упускаю что-то очевидное, но я нахожу следующее довольно загадочным:
$ expect
expect1.1> exec echo a
a
expect1.2>
$ cat > test.exp
exec echo a
$ expect test.exp
$
Если я запускаю expect и заставляю его выполнять что-то вручную, это работает. Если я помещу ту же команду в скрипт, это не сработает. Что происходит?
Ответ №1:
Обратите внимание, что expect по сути является расширением Tcl. Tcl exec
выполняет внешнюю команду, захватывает выходные данные и возвращает их в виде значения — он не отправляет его в стандартный вывод, если вы не проинструктируете его об этом. Однако интерактивный сеанс Tcl (или expect) выводит выходные данные в стандартный вывод для удобства.
Ваш сценарий должен быть:
puts [exec echo a]
# or
set output [exec echo a]
puts $output
Я предполагаю, что «echo a» является заполнителем для более сложной внешней команды. Если вы просто хотите что-то напечатать:
puts "this is something" ;# the Tcl way
send_user "this is toon" ;# the expect way
Если вы новичок как в Tcl, так и в expect, то вам следует сначала изучить Tcl.
Комментарии:
1. Спасибо за объяснение. Вы правы, я тоже новичок в Tcl. Если быть предельно честным, я не стремлюсь научиться программировать на Tcl; я просто хотел решить практическую проблему, и expect показался мне подходящим инструментом для этой работы. Возможно, такого рода усилия больше подходят для superuser.com .
2. @LaC, я предложил изучить Tcl (это не займет много времени), потому что это тонны облегчит ваше ожидаемое программирование.
3. Еще одна вещь: не завершайте команду с помощью «». В противном случае произойдет сбой. По крайней мере, в моем случае это не удалось.