如何在 linux expect 的 exec 命令中执行多个命令

How can I execute more than one command in exec command of linux expect

我正在尝试使用 Linux 的 expect 来检测主机是否可用。

现在,我可以通过 bash 使用以下命令来获取 return 值并检查主机状态。

#!/usr/bin/bash
nc -z $DUT_IP 22 && echo $?

我想通过 expect 做同样的事情。但是我好像失败了。

#!/usr/bin/expect --   
set DUT_IP "192.168.1.9"
set result [exec nc -z $DUT_IP 22] 
send_user "$result\n\n"

我收到以下错误消息:

    invalid port &&
        while executing
    "exec nc -z $DUT_IP 22 && echo $?"
        invoked from within
    "set result [exec nc -z $DUT_IP 22 && echo $?] "
        (file "reboot.exp" line 44)

使用 && 分隔命令是 shell 构造,而不是 expect 构造。您可以为该命令列表显式启动 shell:

set result [exec sh -c "nc -z $DUT_IP 22 && echo $?"]

请注意,只有在命令 成功 时才会打印退出状态,因此结果将为“0”或为空。您想使用 ; 而不是 &&