命令名称无效" cat"。期望在shell脚本发送[]

时间:2016-01-14 05:00:29

标签: shell expect

我想在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()

为什么输出不同的执行结果?

1 个答案:

答案 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将始终期望并分别向stdinstdout发送命令。

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命令的功能。