You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SSH在screen中执行远程shell脚本并实时查看标准输出的问题

通过SSH在screen中执行远程shell脚本并实时查看标准输出的问题

我之前在macOS上用自带screen做类似操作时也踩过这些坑,给你梳理下问题和可行的解决方案:

先分析你当前命令的问题

你用的ssh -f user@machineB 'screen -dm sh /Users/user/Bin/script.sh; exec sh'有两个主要问题:

  1. screen -dm是后台分离模式启动screen,会话一开始就和终端断开了,所以你看不到脚本的实时输出;而且exec sh完全多余,它会在SSH连接里启动一个新shell,但screen已经分离了,这个shell根本没用。
  2. 你提到的$TERM too long报错,是因为macOS默认的TERM环境变量(比如xterm-256color)长度超过了原生screen的限制,它对TERM字符串长度有严格要求。

解决方案1:直接启动screen会话并实时查看输出

如果你想立刻看到脚本的执行输出,不用后台启动,用这个命令:

ssh -t user@machineB 'screen -S my_script_session sh /Users/user/Bin/script.sh'
  • -t:强制给SSH分配伪终端,这是screen正常运行的必要条件
  • -S my_script_session:给screen会话起个自定义名字,后续恢复时更容易找到
    执行后你会直接进入screen会话,实时看到脚本的stdout。如果想暂时退出但保持脚本运行,按Ctrl+A再按d即可分离会话;之后要恢复的话,执行:
ssh -t user@machineB 'screen -r my_script_session'

解决方案2:后台启动screen,后续再查看输出(同时解决TERM报错)

如果需要先把脚本放后台运行,之后再查看输出,要先处理TERM的问题,命令如下:

# 后台启动screen并执行脚本
ssh -f user@machineB 'TERM=xterm screen -dmS my_script_session sh /Users/user/Bin/script.sh'

这里TERM=xterm把终端类型改成短字符串,避开screen的长度限制。之后恢复会话时也要指定TERM:

ssh -t user@machineB 'TERM=xterm screen -r my_script_session'

额外注意事项

  • 确保你的脚本有执行权限:如果还没加,在机器B上执行chmod +x /Users/user/Bin/script.sh
  • 如果脚本需要交互输入,你恢复screen会话后正常输入即可,screen会传递交互内容到脚本

备注:内容来源于stack exchange,提问作者DeathToMediocrity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 07:49:51