Pipe

命令需要文件路徑。如何為“infile”提供標準輸入,為“outfile”提供標準輸出?

  • November 24, 2018

考慮一個類似的命令foo -in /path/to/infile -out /path/to/outfile,您希望將字元串傳遞給而不是使用臨時文件。它可能被稱為很多導致大量磁碟訪問,或者與您不想將敏感數據寫入磁碟(或處理加密和/或 ram 磁碟等)的加密有關。

有沒有辦法給它stdin並在stdout中獲得輸出,

比如echo "abc" | foo -in &0 -out &1

我知道有文件描述符可以重定向數據,比如echo "foo" 1>&2. 像這樣的東西xargs可以將字元串作為參數傳遞。但是有可能以某種方式將標准文件描述符作為文件路徑傳遞嗎?如果我可以作為文件讀寫標準輸入/輸出,為什麼不能獲得它的“虛擬”文件路徑?

您可以使用特殊文件/dev/stdin/dev/fd/0用於標準輸入,/dev/stdout/dev/fd/1用於標準輸出。

在您的範例中:

echo "abc" | foo -in /dev/fd/0 -out /dev/fd/1

這些特殊文件的可用性取決於您所使用的作業系統,但在 Linux(以及大多數 Linux 發行版)上,查找或使用它們應該沒有問題。

這些文件是“虛擬的”,因為寫入其中一個文件不會將數據寫入磁碟。打開這些特殊文件之一相當於呼叫dup(2)系統呼叫,它將現有文件描述符複製到新文件描述符上。

引用自:https://unix.stackexchange.com/questions/483573