Expect Script-awk say变量不';不存在

Expect Script-awk say变量不';不存在,awk,grep,expect,Awk,Grep,Expect,我尝试了“\”转义引号和特殊符号。它不起作用。我也尝试过发送和繁殖。不起作用。如果我只运行grep。。。。。。。。。。。命令返回我需要的内容。任何关于如何从我的expect文件中运行此程序的帮助都将非常有用。谢谢。单引号在expect中没有特殊意义。使用大括号来实现相同的效果: #!/usr/bin/expect -f set name [lindex $argv 0] send "grep $name /usr/local/bin/c | awk '{print $3}' | awk '

我尝试了“\”转义引号和特殊符号。它不起作用。我也尝试过发送和繁殖。不起作用。如果我只运行grep。。。。。。。。。。。命令返回我需要的内容。任何关于如何从我的expect文件中运行此程序的帮助都将非常有用。谢谢。

单引号在expect中没有特殊意义。使用大括号来实现相同的效果:

#!/usr/bin/expect -f

set name [lindex $argv 0]

send  "grep $name /usr/local/bin/c | awk '{print $3}' | awk '{print substr($1,10)}'\r"
spawn  grep $name /usr/local/bin/c | awk '{print $3}' | awk '{print substr($1,10)}'
参考:

大括号之间的字符不进行替换


此外,在不了解您对输出所做的操作的情况下,您可能不需要
spawn

spawn awk -v n="perferx" {$0 ~ n {print substr($3,10,5)}} /usr/local/bin/c
# .......................^..............................^

现在,您可以对$output执行简单的字符串解析,首先简化您的命令-此任务不需要grep、2个awk和管道。如果您要在命令行上运行它,它将是
awk-vn=“$name”'$0~n{print substr($3,10)}'/usr/local/bin/c
,因此您应该使用expect尝试使用该命令。首先,我会尝试使用一个更简单的命令,比如
awk'BEGIN{print“hello world”}
来工作。谢谢。我仍然得到错误:无法读取“0”:在执行“spaw awk-v n=“perferx”'$0~n{print substr($3,10,5)}'/usr/local/bin/c”时没有这样的变量。有什么想法可以试试。谢谢。我不是想建议你可以简单地将awk脚本插入到expect脚本中,然后它就可以工作了,我只是说这是开始的命令行脚本。我已经给出了我的想法,尝试使用一个更简单的命令,比如
awk'BEGIN{print“hello world”}
来工作这是我需要的,但是它变成了一个变量。使我更容易完成我正在做的事情。我确实在另一篇文章中看到了这一点,但我并不十分清楚。expect是一个非常有用的工具,但它的应用范围确实非常狭窄。一旦您意识到expect是建立在Tcl之上的,并且您有一个强大的通用语言来工作,事情就会变得简单。
set output [exec awk -v n="perferx" {$0 ~ n {print substr($3,10,5)}} /usr/local/bin/c]