Bash
如何使用管道將文本應用於程序
我的導師說要使用管道將包含測試案例列表的文本文件應用於從輸入文件中獲取測試案例的工作程序。說我有
test_cases.txt my_program //my java program after compliation
當我這樣做時
java my_program | test_cases.txt
它給
[1]+ Stopped java my_program | test_cases.txt
不知道如何使用管道…
首先,管道連接兩個程序,而不是文件(包括文本文件),這樣一個程序的輸出就會進入另一個程序的輸入。假設是“生成”輸出的程序將其發送到
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
也就是說,除非這是一個將包含在更大的流程鏈中的一個步驟,稍後在使用管道的過程中將變得有必要。