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

时间:2016-04-24 22:28:32

标签: bash shell ssh

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

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

ssh me@server
./foo.sh

这样我得到了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)

1 个答案:

答案 0 :(得分:0)

你需要强制伪TTY分配:

ssh -t me@server "./foo.sh"

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