Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在expect中将交互与回报结合起来意味着什么?_Shell_Expect - Fatal编程技术网

Shell 在expect中将交互与回报结合起来意味着什么?

Shell 在expect中将交互与回报结合起来意味着什么?,shell,expect,Shell,Expect,我想使用shell并期望只使用一个命令登录到服务器。 但是当在一个语句中使用interact和return时,我不明白它们的意思。另外,“密码”只会在SSH链路多路复用断开时出现,所以我希望当“密码”不出现时,它不会发送“MyPassword” 那么,如何编写脚本以统一的方式处理这两种情况呢 当SSH多路链接建立时,我的脚本被困在“expect”密码中。如何处理 另外,我想问一下-o参数在交互之后意味着什么?使用“交互”和“返回”的含义是什么 “发送--”和“发送”有什么区别 我已启用SSH主连

我想使用shell并期望只使用一个命令登录到服务器。 但是当在一个语句中使用interact和return时,我不明白它们的意思。另外,“密码”只会在SSH链路多路复用断开时出现,所以我希望当“密码”不出现时,它不会发送“MyPassword”

  • 那么,如何编写脚本以统一的方式处理这两种情况呢
  • 当SSH多路链接建立时,我的脚本被困在“expect”密码中。如何处理
  • 另外,我想问一下-o参数在交互之后意味着什么?使用“交互”和“返回”的含义是什么
  • “发送--”和“发送”有什么区别
  • 我已启用SSH主连接。在登录到服务器之前,我需要首先输入密码,然后输入一个数字来表示我登录到的机器。但是,当建立SSH多路复用链路时,输入密码的选项变得多余

    #!/usr/bin/expect
    
    # ssh command
    set cmd [lindex $argv 0]
    set relay_num [lindex $argv 1]
    
    set timeout -1
    
    # run ssh command
    spawn bash -c "$cmd"
    
    expect "Password*"
    send "mypassord\r"
    
    interact -o -nobuffer -re "Option" return
    send -- "$relay_num\r"
    
    interact
    

    结合
    -o
    开关,该行查看regex“Option”的命令输出。
    返回
    将导致
    交互
    命令结束,脚本继续执行
    发送
    命令(手册页对此进行了说明)

    我认为使用
    expect“Option”
    会更清楚。

    如果
    variable
    的内容不可预测,则使用
    send--$variable
    是一种很好的做法。如果执行了
    send$variable
    variable
    的值恰好以
    -
    开头,则
    send
    命令将尝试将其解释为一个选项。首先添加选项
    --
    可以避免此问题。