我已經編譯了下面的 c 代碼,它應該將它在標準輸入中接收到的任何輸入發送到標準輸出。它在以下情況下按預期作業:
[user@host ~]$ ./my_program
test...
test...
^C
[user@host ~]$ echo "Hello" | ./my_program
Hello
[user@host ~]$ ./my_program < test.txt
Contents of test.txt ...
但是,如果我將 shell 命令的輸出重定向到我的程式中,如下所示:
[user@host ~]$ ./my_program <(echo "Hello")
它不輸出任何東西并等待輸入,就好像我只是用啟動程式一樣./my_program
我期望一個輸出Hello
然后程式結束。當我運行命令時,cat <(echo "Hello")
我得到了這個預期的結果。是什么導致cat
和之間的行為差??異my_program
?
/* my_program.c */
#include <stdio.h>
int main()
{
int c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
return 0;
}
uj5u.com熱心網友回復:
發布社區 Wiki,因為問題是由拼寫錯誤引起的,因此偏離主題。
您正在傳遞與管道相關聯的檔案名,并echo "Hello"
在程式的命令列上輸出,而不是將其附加到標準輸入。
<
要將其附加到標準輸入,您需要在命令列中添加額外內容:
./my_program < <(echo "Hello")
它以cat
另一種方式作業,因為當cat
傳遞命令列引數時,它將它們視為要讀取的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470205.html