【问题标题】:Invalid Command Name whilst sending If Statement发送 If 语句时命令名称无效
【发布时间】:2021-03-29 08:31:35
【问题描述】:

bash 编程新手,

以下期望脚本 ssh 进入服务器,但在尝试发送该命令时出现无效命令名称错误。此外,即使“if”命令有效,也是一个次要问题,以下期望行将从命令本身获取“失败”或“通过”而不是等待结果 - 我如何让它等待适当的结果.

send "if [[ $(hostname -s) == $hostname ]] ; then echo pass ; else echo fail ; fi ; \r"
        expect {
                "fail" {
                        send -- "echo failed\r"
                }
                "pass" {
                        send -- "echo success\r"
                }
        }

感谢大家的帮助!

【问题讨论】:

  • 什么是目标用户
  • 哪个'if'命令有效
  • 哪个是无效的命令名
  • 或许expect { "fail\r" … 解决了次要问题
  • 写期望你必须先学习Tcl。例如[ ... ]$(hostname -s)$hostname 在 Tcl 中都有特殊的含义。如果您对 shell 语法更熟悉,可以试试我的sexpect

标签: bash tcl expect


【解决方案1】:

期待 语言的扩展。 Tcl 使用[...] 作为其command substitutio 语法。

假设你打算在远程主机上执行hostname -s,你必须写:

send "if \[\[ \$(hostname -s) == $hostname ]] ; then echo pass ; else echo fail ; fi ; \r"

# or, with shell boolean operators
send "\[\[ \$(hostname -s) == $hostname ]] && echo pass || echo fail\r"

这可以保护 Tcl 解释的左括号和 shell 命令替换,但允许扩展 $hostname 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2017-06-30
    • 2012-01-31
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多