就Java而言,据我所知,仅当它作为脚本运行时,才可以通过管道将bash的输出(或输入)通过管道传递给bash,而不是当它作为交互式shell运行时(在这种情况下,只能将cmd参数传递给它)。
换句话说,如注释中所述,当您从cmd运行bash时,您会看到输出,但它包含在bash进程中,bash发送回父cmd进程不是输出。
关于javac进程,它实际上是将输出发送到错误流。尝试从CMD运行javac 1>null
和javac 2>null
,你会看到其中的差别。 您看过这里的api 吗?您可以尝试使用ProcessBuilder并将错误流重定向回主要输入流,以这种方式处理流程会容易得多。