我花了几个小时研究这个问题,却没能找到针对我的特定用例的答案。
我有一个位于机器 B 上的脚本。我打算在机器 A 上运行一个命令,建立一个 SSH 会话,在屏幕内运行脚本,并显示标准输出,就像我在机器 B 上直接运行屏幕命令一样。
经过几个小时的反复尝试,我得到了下面的命令,这是迄今为止我得到的最佳结果。它似乎成功启动了屏幕会话,我可以通过 SSH 恢复它,但脚本没有执行。
ssh -f user@machineB 'screen -dm sh /Users/user/Bin/script.sh; exec sh'
该命令的另一种迭代(我没有记录)似乎执行了脚本,但是当我尝试恢复活动的屏幕会话时,屏幕返回错误$TERM too long - sorry.
我在机器 A 和 B 上运行 macOS,并使用 macOS 的内置屏幕二进制文件。如果可能的话,我想坚持使用本机工具,即使屏幕不是最好的解决方案。
注意到 nohup 可能是一个更简单的解决方案,但我感觉我目前的 *nix 基础知识使得接近 nohup 更具挑战性。
我感谢任何正确的推动!
答案1
使用-t
选项连接。这将启用 tty 分配(通常对交互式连接启用,但不对单命令连接启用),并允许正常使用 Screen 和所有其他交互式程序。
ssh -t user@machineB "screen sh /Users/user/Bin/script.sh"