Bash 为什么输出在ssh上表现不同?

Bash 为什么输出在ssh上表现不同?,bash,shell,ssh,Bash,Shell,Ssh,我通过SSH以两种不同的方式执行函数foo.sh(它执行一些更复杂的事情,比如执行多个python进程) 首先,采用以下方式(交互式shell): 这样我就得到了foo.sh的所有输出(stderr和stdout) 然后,另一种方式: ssh me@server "./foo.sh" 这样我就不会从任何子流程中获得任何输出。这两种方法有什么区别?为什么stderr/stdout的行为不同 foo.sh的一个例子是 #! /bin/bash ./bar.py bar.py在哪里 #! /usr

我通过SSH以两种不同的方式执行函数foo.sh(它执行一些更复杂的事情,比如执行多个python进程)

首先,采用以下方式(交互式shell):

这样我就得到了foo.sh的所有输出(stderr和stdout)

然后,另一种方式:

ssh me@server "./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 me@server "./foo.sh"

在执行ssh remote“somecommand”时,您正在远程主机上生成一个未绑定到任何终端的非登录、非交互式shell会话,因此没有作业控制。这就是为什么您只需要强制执行伪TTY分配。

请为
foo.sh
提供一些最小内容,以重现您观察到的行为。第一种方法是什么?您在登录到远程服务器后在交互式shell中运行脚本?是的,第一种方法是使用交互式shellshell@merlin2011我添加了一个最小的示例。
ssh -t me@server "./foo.sh"