Tcl 使用awk时exp\u send中的转义^symbol
因此,我需要从expect脚本传递一个Tcl 使用awk时exp\u send中的转义^symbol,tcl,expect,Tcl,Expect,因此,我需要从expect脚本传递一个Awk命令来识别一个eth接口,该接口包含一个特定的八位字节,我目前正在做 exp_send "ip addr show | awk -F: '/\^\[0-9\]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}' \r" 问题在于/\^\[0-9\]部分,单个\不起作用,我还尝试添加了似乎也不起作用的\ 还尝试将整个awk内容包装到{..}中,但同样无效 exp_send "ip addr show | awk
Awk
命令来识别一个eth
接口,该接口包含一个特定的八位字节,我目前正在做
exp_send "ip addr show | awk -F: '/\^\[0-9\]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}' \r"
问题在于/\^\[0-9\]
部分,单个\
不起作用,我还尝试添加了似乎也不起作用的\
还尝试将整个awk
内容包装到{..}
中,但同样无效
exp_send "ip addr show | awk -F: {/^\[0-9\]/ {dev=\$2} /inet .*\.227/ {print dev; exit}} \r"
任何关于如何解决这一问题的线索都将不胜感激
更新,根据@whjm的建议,我启用了内部调试器选项
exp_internal -f /tmp/debug 1
exp_send "ip addr show | awk -F: '/^\[0-9]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}'\r"
exp_internal 0
生成信息作为
send: sending "ip addr show | awk -F: '/^[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
终端设备上的控制台捕获会产生
$ send: sending "ip addr show | awk -F: '/[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
ip addr show | awk -F: '/[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'
^
字符在发送时会丢失。它似乎是您需要关注的外部引号。试一试
exp_send {ip addr show | awk -F: '/^[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'}
# .......^ using Tcl non-substituting quotes, so inside stuff does not need escaping
exp_send "\r"
这似乎是你需要关注的外部引号。试一试
exp_send {ip addr show | awk -F: '/^[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'}
# .......^ using Tcl non-substituting quotes, so inside stuff does not need escaping
exp_send "\r"
如果您想使用双引号(例如,在其中包含一些
$var
):
在Tcl语言中:
^
和'
并不特殊{
在双引号(“…”
)中并不特殊如果您想使用双引号(例如,在其中包含一些
$var
):
在Tcl语言中:
^
和'
并不特殊{
在双引号(“…”
)中并不特殊请显示足够的脚本以重现问题。此外,将输入改为指向文件将有助于其他人重现它。@merlin2011:如果我有办法,我会提供它,通常
expect
脚本不容易重新创建,可能是在寻找适用于转义meta cha的通用拇指规则tcl
/expect
第一条send:sending
消息确实有^
但第二条没有。奇怪。介意给出你spawn
ed的确切ssh
命令吗?@whjm:我应该在那里寻找什么可疑的东西吗?同样,这是结构良好的代码,ssh
过程是抽象的我需要通过一系列函数调用来查看实际使用的选项。请显示足够多的脚本来重现问题。此外,将输入改为指向文件将有助于其他人重现问题。@merlin2011:如果我有办法,我会提供它,一般来说,expect
脚本不容易重新创建Eded,可能正在寻找一个通用的拇指规则,适用于转义tcl
/expect
中的元字符。第一个发送:发送消息确实有^
,但第二个没有。奇怪。介意给出你生成的确切ssh
命令吗?@whjm:我应该看看有什么可疑的地方吗同样,它是结构良好的代码,ssh
过程是抽象的,我需要通过一系列函数调用来查看实际使用的选项。感谢glenn的回答,当以这种方式发送时,命令显示为ip addr show | awk-F:'/[0-9]/{dev=$2}/inet.\.227/{print dev;exit}“
在终端设备中。请注意,^
不存在!您如何连接到终端设备?它是telnet?它是通过ssh来完成的。只需查看另一个答案中的注释,看看发生了什么:)克拉符号在expect或awk中通常一点也不特殊。您的连接协议正在执行某些操作用反斜杠(/\^[0-9]/
)将其转义,或将其加倍(/^[0-9]/
),或尝试将其作为十六进制字符发送(/\x5e[0-9]/
)感谢glenn,不幸的是,建议的选项都不起作用。我使用了另一种方法来处理这个问题,一个没有^
的grep
命令感谢glenn的回答,当以这种方式发送时,命令显示为ip addr show | awk-F:'/[0-9]/{dev=$2}/inet.\\.227/{print dev;exit}“
在终端设备中。请注意,^
不存在!您如何连接到终端设备?它是telnet?它是通过ssh来完成的。只需查看另一个答案中的注释,看看发生了什么:)克拉符号在expect或awk中通常一点也不特殊。您的连接协议正在执行某些操作用反斜杠(/\^[0-9]/
)将其转义,或将其加倍(/^[0-9]/
),或尝试将其作为十六进制字符发送(/\x5e[0-9]/
)谢谢glenn,不幸的是,所有建议的选项都不起作用。我使用了另一种方法来处理这个问题,一个没有^
的grep
命令谢谢你的回答。与我对glenn上面的回答的评论类似,你的逻辑使命令显示为ip addr show | awk-F:'/[0-9]/{dev=$2}/inet.\.227/{print dev exit}“
在终端设备上。同样,^
丢失,这对我来说是不正确的。Tcl/Expect本身不会丢弃^
字符。你能Expect-d/your/script.exp
并粘贴输出吗?这不是一个简单的Expect
脚本,我正在使用Tcl
文件上的库。因此上下文是脚本在测试台上运行,ssh
进入终端设备,并通过这个exp\u send
来获得包含八位字节的ethni
接口。您可以在exp\u internal-f/tmp/debug 1
和exp\u internal 0
之间放置一些语句。您能详细说明一下吗,还没有使用exp\u internal>
before。我应该在哪里添加它?谢谢你的回答。与我对格伦上述答案的评论类似,你的逻辑使命令在终端设备上显示为ip addr show | awk-F:'/[0-9]/{dev=$2}/inet.\.227/{print dev;exit}'
。同样