Bash
如何將標準輸出從右向左重定向
這完美地工作:
./foo | ./bar
但我想要這樣的東西:
./bar <| ./foo
所以我可以反過來管道並在命令行中更快地更改 foo 的參數。
管道需要是實時的——我的
foo
程序永遠不會返回。這可能嗎 ?
./bar < <( ./foo )
例如:
cat < <(echo "hello there!")
要了解它是如何工作的,請分別考慮腳本的各個部分。
此語法:
cat < /path/to/file
將讀取文件/path/to/file
並將其作為標準輸入通過管道傳輸到cat
.此語法:
<(echo "hello there!")
表示執行命令並將標準輸出附加到文件描述符,如/dev/fd/65
. 整個表達式的結果是一個類似 的文本/dev/fd/65
,以及一個並行執行的命令並提供該文件描述符。現在,結合起來,腳本將執行正確的命令,將其通過管道傳輸到文件描述符,將該文件描述符轉換為左側命令的標準輸入,然後執行左側命令。
沒有我知道的成本,它與 完全相同
a | b
,只是語法糖。
一個簡單而正確的方法是定義一個 foobar 函式,
foobar () { ./foo "$@" | ./bar ; }
(根據需要在命令行中,或在某些啟動腳本中,例如“.bashrc”)。然後每當你這樣做:
foobar "this" that "and this also"
它會做
./foo this that "and this also" | ./bar