SSH远程服务器并在tmux分离模式下运行带管道命令的问题
解决方法
你的问题源于tmux参数格式错误,以及SSH命令传递时的引号解析问题,以下是修正后的方案:
直接修正的命令写法
ssh root@192.168.1.10 -C "tmux new-session -d -s MySession 'nc -l 10000 | zfs receive tank/remotepool'"
或者用单引号嵌套的方式(需转义内部单引号):
ssh root@192.168.1.10 -C 'tmux new-session -d -s MySession '\''nc -l 10000 | zfs receive tank/remotepool'\'''
问题原因说明
- tmux的
-d(分离模式)和-s(指定会话名)选项必须配合new-session子命令使用,你之前省略了new-session,导致tmux无法识别要执行的后续命令。 - 原命令中,单引号包裹的管道命令可能被本地Shell提前解析。通过外层套双引号,或转义内部单引号,能确保完整命令字符串传递到远程服务器,让tmux执行时正确解析管道符。
替代方案(复杂场景更适用)
用tmux send-keys间接发送命令,避免引号解析问题:
ssh root@192.168.1.10 -C 'tmux new-session -d -s MySession; tmux send-keys -t MySession "nc -l 10000 | zfs receive tank/remotepool" Enter'
该方式先创建分离会话,再向会话发送命令和回车信号,兼容性更强。
内容的提问来源于stack exchange,提问作者user1955162
相关产品推荐
相关产品推荐

