【问题标题】:How to execute consecutive commands using ssh -t如何使用 ssh -t 执行连续命令
【发布时间】:2020-07-07 00:22:20
【问题描述】:

我想做什么:

ssh somewhere@ip -t "tmux && echo 'a'"

意图是:'访问远程服务器(ip)并打开 tmux 并在该 tmux 会话上回显“a”'。

但它错过的是echo 'a':它在我的本地机器上打印“a”,而不是远程服务器的 tmux 会话(即使在我手动退出 tmux 会话之后)

我该怎么做?

【问题讨论】:

  • 如何将tmux && echo 'a' 写入rfile,将rfile sftp 到somewhere,然后在somewhere 上执行sh rfile
  • @JeffHolt 可以工作,但我的全部目标是在 echo 后保持 tmux 会话保持活跃
  • 我也尝试过:tmux new -d -s my-session "echo 'a'" 但它在回显后不断终止会话
  • 您要执行哪个shell echo a,启动tmux 的shell 还是tmux 启动的shell?

标签: bash shell ssh tmux


【解决方案1】:

考虑使用期望脚本来解决您的问题:

#!/usr/bin/expect


spawn ssh somewhere@ip 

interact {

-o -nobuffer "$"  {
        send "tmux\n"
}

}

上述脚本无法完成工作。基本上,它会在 ssh 会话输出中查找 $(假设您的提示以 '$' 结尾),它会发送字符“tmux”和换行符。这将启动您的 tmux 会话。但是,当 tmux 会话以交互方式提示用户时,您必须添加一个额外的案例以将“a\n”发送到 tmux。

您可能需要花点时间让expect 为您工作。我不是 expect 方面的专家,但它可能是适合这项工作的工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2014-09-02
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多