Pipe
命令需要文件路徑。如何為“infile”提供標準輸入,為“outfile”提供標準輸出?
考慮一個類似的命令
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)系統呼叫,它將現有文件描述符複製到新文件描述符上。