Bash

如何通過管道傳輸到 bashrc 文件中的源函式?

  • January 19, 2019

我們都知道如何通過管道傳輸到 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" )"

這將$@在函式中設置為單個 string hi there。如果管道數據是單個字元串或短行文本,這將是一個完全有效的解決方案。要處理大量數據,請考慮以通常的逐行方式(可能使用awk)來代替cat上述函式定義中的 to 呼叫,並從管道中讀取數據,如上述測試。

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