Bash
如何使用 bash 將子程序傳遞給命令
我正在嘗試使用子程序將多個輸出傳遞給命令。這是我的命令(縮短版本):
cat "$1" one=cat "$1"
的輸出
command <(echo "foo")
是foo /dev/fd/63: Permission denied
由於
cat "$1"
工作,我假設該函式有權讀取子程序的輸出,但是當我嘗試將其放入變數時,權限被拒絕。為什麼會這樣,有什麼辦法可以解決嗎?
你的問題並不完全清楚。但我猜你有一個名為的命令
x
,它執行以下操作:cat "$1" one=$(cat "$1")
現在,當你這樣做時,你
x <(echo "foo")
會得到一個錯誤。這是因為
<(...)
結構是如何工作的。基本上它執行
echo foo
並將其輸出連接到臨時文件句柄(/dev/fd/63
),然後將其作為參數傳遞。所以現在你的第一個
cat
命令讀取整個輸入。這意味著沒有輸入。所以你的第二個cat
命令沒有什麼可讀的。你會得到一個錯誤,因為這個echo
過程已經完成並且沒有打開的句柄可以讀取。在一個簡單的形式中,你已經完成了一個特殊版本的
echo "foo" | { cat one=$(cat) }
但具有巧妙的文件處理魔法。