在期望脚本中不能使用awk:命令名称无效" awk"

时间:2013-11-19 22:25:44

标签: awk expect

我正在尝试用awk编写脚本来升级某些设备上的固件。我试图使用awk读取节点列表,但由于某种原因它无法找到并执行awk命令,我不断收到错误 invalid command name "awk" while executing "awk {{'NR==$i' test.txt}}" ("for" body line 2)。我是期待脚本的新手,但我看到其他人在期待中执行awk,我不知道为什么它说awk是一个无效的命令名。

#!/usr/bin/expect -f

set logfile [open logfile.txt "w"]
#set len [awk 'END {print NR}' test.txt]
set timeout -1
spawn $env(SHELL)
match_max 100000
for {set i 1} {$i <= 2} {incr i 1} {
   set node [awk {{'NR==$i' test.txt}}]
   send -- "./myconsole\r"
   expect "*Option-> "
   send -- "4\r"
   expect "*Firmware upgrade was successful for node"
   puts $logfile "Node ID $node success"
}

expect "*Option-> "

send -- "^D^C\r\r"

close $logfile

任何人都有任何想法为什么awk无效?

2 个答案:

答案 0 :(得分:2)

您必须使用[exec awk ...]

答案 1 :(得分:0)

实际上,该命令可能无需使用exec即可运行。期望哪个是具有期望扩展的tcl解释器将具有未知函数,当查找命令或proc失败时,它被调用。这个未知函数可以为您调用命令的exec并返回结果。大多数口译员都是这样设置的。关于Tcl的一个很酷的事情是你可以重写/扩充未知的过程来满足你的需求。另一个更可能的可能性是你没有在你的道路上有awk。在expect(以及扩展名为tcl)中,您可以这样检查:

set AWK [auto_execok "awk"
if { [ string length $AWK ] == 0 } { 
   puts "Awk not found on path!"
   exit 1
} else { 
   puts "Awk has been found and is : $AWK"
} 
exec $AWK ....