Neo Mosaid Asked: 2019-01-20 02:23:31 +0800 CST2019-01-20 02:23:31 +0800 CST 2019-01-20 02:23:31 +0800 CST 如何通过管道传输到 bashrc 文件中的源函数? 772 我们都知道如何通过管道传输到 shell 脚本和已安装的程序,如 grep、awk ......但是 .bashrc 或 .zshrc 中的源函数呢? 这是一个测试功能: function fff(){ echo "$@" } 这是一个测试命令: $ echo "hello world" | fff 它不起作用 bash zsh 1 个回答 Voted Best Answer Kusalananda 2019-01-20T02:27:42+08:002019-01-20T02:27:42+08:00 您的函数需要命令行参数,而不是标准输入流上的数据(当您通过管道传递给它时)。 您可以做的是测试是否为函数提供了任何命令行参数,如果没有,则输出标准输入流: fff () { if [ "$#" -gt 0 ]; then echo "$@" else cat fi } 测试: $ echo "hi there" | fff hi there 另一种解决方案是使用原始函数定义的命令替换: fff "$( echo "hi there" )" 这将$@在函数中设置为单个 string hi there。如果管道数据是单个字符串或短行文本,这将是一个完全有效的解决方案。要处理大量数据,请考虑以通常的逐行方式(可能使用awk)来代替cat上述函数定义中的调用,并从管道中读取数据,如上述测试。
您的函数需要命令行参数,而不是标准输入流上的数据(当您通过管道传递给它时)。
您可以做的是测试是否为函数提供了任何命令行参数,如果没有,则输出标准输入流:
测试:
另一种解决方案是使用原始函数定义的命令替换:
这将
$@
在函数中设置为单个 stringhi there
。如果管道数据是单个字符串或短行文本,这将是一个完全有效的解决方案。要处理大量数据,请考虑以通常的逐行方式(可能使用awk
)来代替cat
上述函数定义中的调用,并从管道中读取数据,如上述测试。