Bash

如何將標準輸出從右向左重定向

  • November 25, 2019

這完美地工作:

./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

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