我正在尝试用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无效?
答案 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 ....