所以我需要从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 -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}'
^
字符在发送时有些丢失。
答案 0 :(得分:1)
似乎需要关注外部引号。尝试
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"
答案 1 :(得分:1)
如果您想使用双引号(例如,在其中包含一些$var
):
exp_send "ip addr show | awk -F: '/^\[0-9]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}'\r"
用Tcl语言:
^
和'
并不特别。{
在双引号("..."
)中并不特殊。