使用 awk 时转义 exp_send 中的 ^ 符号
Escaping ^ symbol in exp_send when using awk
所以我需要从 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=} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
终端设备上的控制台捕获生成,
$ send: sending "ip addr show | awk -F: '/[0-9]/ {dev=} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
ip addr show | awk -F: '/[0-9]/ {dev=} /inet .*\.227/ {print dev; exit}'
^
字符在发送时以某种方式丢失。
看来是外面的引号你要注意了。尝试
exp_send {ip addr show | awk -F: '/^[0-9]/ {dev=} /inet .*\.227/ {print dev; exit}'}
# .......^ using Tcl non-substituting quotes, so inside stuff does not need escaping
exp_send "\r"
如果您想使用双引号(例如在其中包含一些 $var
):
exp_send "ip addr show | awk -F: '/^\[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'\r"
在 Tcl 语言中:
^
和'
并不特殊。
{
在双引号中没有特殊意义("..."
).
所以我需要从 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=} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
终端设备上的控制台捕获生成,
$ send: sending "ip addr show | awk -F: '/[0-9]/ {dev=} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
ip addr show | awk -F: '/[0-9]/ {dev=} /inet .*\.227/ {print dev; exit}'
^
字符在发送时以某种方式丢失。
看来是外面的引号你要注意了。尝试
exp_send {ip addr show | awk -F: '/^[0-9]/ {dev=} /inet .*\.227/ {print dev; exit}'}
# .......^ using Tcl non-substituting quotes, so inside stuff does not need escaping
exp_send "\r"
如果您想使用双引号(例如在其中包含一些 $var
):
exp_send "ip addr show | awk -F: '/^\[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'\r"
在 Tcl 语言中:
^
和'
并不特殊。{
在双引号中没有特殊意义("..."
).