夢のの*_*のの夢 3 command-line bash pipe io-redirection
我的讲师说使用管道将包含测试用例列表的文本文件应用于从输入文件中获取测试用例的工作程序。说我有
test_cases.txt
my_program //my java program after compliation
Run Code Online (Sandbox Code Playgroud)
当我这样做时
java my_program | test_cases.txt
Run Code Online (Sandbox Code Playgroud)
它给
[1]+ Stopped java my_program | test_cases.txt
Run Code Online (Sandbox Code Playgroud)
不知道如何使用管道...
首先,管道连接两个进程,而不是文件(包括文本文件),这样一个的输出会转到另一个的输入。假设是“生成”输出的进程将其发送到STDOUT
,后者成为管道的源,而“接收”输入的进程从 读取它STDIN
,后者成为管道的目的地。您不能将管道连接到文本文件或任何其他文件,只能连接到进程。
其次,当使用管道时,管道左侧的进程使用STDOUT
,而管道右侧的进程使用STDIN
。因此,你的企图命令将尝试发送输出的my_program
到管道,并不读取。
如果您正确地提供了给您的说明,那么它无论如何都无法工作。说明以“...一个工作程序从输入文件中获取测试用例”结尾。如果程序从文件中获取输入,则它不会从 读取STDIN
,并且无论如何都会忽略来自管道的数据。
要使其与管道一起工作,my_program
必须写入以从 读取STDIN
,就像期望您在提示下手动键入测试用例一样。然后你可以将命令行重写为
cat text_cases.txt | jave my_program
cat
是一个过程,它将读取文本文件并将其内容发送到STDOUT
,然后my_program
将STDIN
使用管道“读取”数据,而不是手动输入数据。由于我不知道 java 如何与管道连接,这是基于它会以标准方式运行的假设,因为讲师要求您使用该方法。
恕我直言,使用重定向比使用管道更好,因为资源使用更少。
java my_program < test_cases.txt
也就是说,除非这是一个将包含在后续课程中需要使用管道的更大流程链中的步骤。