我以两种不同的方式通过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)
答案 0 :(得分:0)
你需要强制伪TTY分配:
ssh -t me@server "./foo.sh"
在执行ssh remote "somecommand"
时,您在未绑定到任何终端的远程主机上产生非登录的非交互式shell会话,因此没有作业控制。这就是为什么你只需要强制伪TTY分配。