我想在shell脚本中使用expect
我的代码在这里
<h3>Select Tournament</h3>
<select id="tournaments">
<option value="">-----</option>
<option value="six-nations">Six Nations</option>
</select>
<input type="submit" onclick="createTeams()" />
<div id="teamsDiv">
</div>
<div id="dispOdds">
</div>
此命令失败
无效的命令名称&#34; cat&#34;
执行&#34; cat hello&#34;
从内部调用&#34;发送[cat hello]&#34;
但是,发送[cat hello]命令在expect prompt
中成功undefined function
createTeams()
为什么输出不同的执行结果?
答案 0 :(得分:1)
内部expect
shell:
当你在expect
shell中时,无论何时给出任何可执行shell命令,都会执行,就像你在终端正常执行它一样。
expect1.1> ls
A B C D
expect1.2> cat A
I am A
expect1.3> pwd
/home/dinesh/test
expect1.4>
如果你把它们放在像[cat A]
这样的方括号内,与正常的命令调用不同,它仍会执行shell命令并返回空字符串。
expect1.4> set val [cat A]
I am A
expect1.5> puts "->$val<-"
-><-
expect1.6>
如果添加的程序的名称与任何shell命令的名称相同,则只会调用相应的命令。
expect1.6> proc cat {input} {
+> return "you passed $input\n"
+> }
expect1.7> cat A
you passed A
expect1.8> cat
wrong # args: should be "cat input"
while executing
"cat "
expect1.9> send [cat A]
you passed A
expect1.10>
除非设置spawn_id
(通过生成任何程序),Expect
将始终期望并分别向stdin
和stdout
发送命令。
expect1.11> exp_internal 1
expect1.12> expect hai
expect: does "" (spawn_id exp0) match glob pattern "hai"? no
正如您在调试输出中看到的那样,exp0
仅指向stdin
。
当expect
程序调用
当显式调用expect
程序时,为了执行任何shell命令,您必须使用exec
命令,否则您将收到invalid command name error
消息。< / p>
expect << EOF
send [exec cat hello]
EOF
输出
[dinesh@lab test]$ ./baek.sh
I am A
[dinesh@lab test]$
现在,为什么会出现这种差异?
从技术上讲,当您使用expect
shell时,您可以在其中执行shell命令的功能。