Bash
如何通過管道傳輸到 bashrc 文件中的源函式?
我們都知道如何通過管道傳輸到 shell 腳本和已安裝的程序,如 grep、awk ……但是 .bashrc 或 .zshrc 中的源函式呢?
這是一個測試功能:
function fff(){ echo "$@" }
這是一個測試命令:
$ echo "hello world" | fff
它不起作用
您的函式需要命令行參數,而不是標準輸入流上的數據(當您通過管道傳遞給它時)。
您可以做的是測試是否為函式提供了任何命令行參數,如果沒有,則輸出標準輸入流:
fff () { if [ "$#" -gt 0 ]; then echo "$@" else cat fi }
測試:
$ echo "hi there" | fff hi there
另一種解決方案是使用原始函式定義的命令替換:
fff "$( echo "hi there" )"
這將
$@
在函式中設置為單個 stringhi there
。如果管道數據是單個字元串或短行文本,這將是一個完全有效的解決方案。要處理大量數據,請考慮以通常的逐行方式(可能使用awk
)來代替cat
上述函式定義中的 to 呼叫,並從管道中讀取數據,如上述測試。