为什么输出的行为与ssh有所不同?
问题描述:
我通过SSH以两种不同的方式执行函数foo.sh(它执行一些更复杂的事情,如执行多个python进程)。为什么输出的行为与ssh有所不同?
首先,通过以下方式(交互式shell):
ssh [email protected]
./foo.sh
这样,我得到的所有输出foo.sh的(错误和stdout)
然后,另一种方式:
ssh [email protected] "./foo.sh"
这样我就不会从任何子过程中得到任何输出。这两种方法有什么区别?为什么stderr/stdout的行为不同?
为foo.sh一个例子是
#! /bin/bash
./bar.py
哪里bar.py是
#! /usr/bin/python3
from sys import stdout, stderr
from time import sleep
while True:
stdout.write("A\n")
stderr.write("B\n")
sleep(0.5)
答
您需要强制伪TTY分配:
ssh -t [email protected] "./foo.sh"
虽然做ssh remote "somecommand"
,你在未绑定到任何终端的远程主机上产生非登录,非交互式shell会话l,所以没有工作控制。这就是为什么你只需要强制一个伪TTY分配。
请提供一些'foo.sh'的最小内容来重现您观察到的行为。 – merlin2011
第一种方法是什么?登录到远程服务器后,您是否在交互式shell中运行脚本? – chepner
是的,第一种方法是使用交互式shell – cskama