如何通过管道传输到 bashrc 文件中的源函数?

如何通过管道传输到 bashrc 文件中的源函数?

我们都知道如何通过管道连接到 shell 脚本和已安装的程序(例如 grep、awk)...但是 .bashrc 或 .zshrc 中的源函数又如何呢?

这是一个测试函数:

function fff(){
    echo "$@"
}

这是一个测试命令:

$ echo "hello world" | fff

它不起作用

答案1

您的函数需要命令行参数,而不是标准输入流上的数据(当您通过管道传递给它时它会获取)。

您可以做的是测试该函数是否给出了任何命令行参数,如果没有,则输出标准输入流:

fff () {
    if [ "$#" -gt 0 ]; then
       echo "$@"
    else
       cat
    fi
}

测试:

$ echo "hi there" | fff
hi there

另一种解决方案是使用命令替换原始函数定义:

fff "$( echo "hi there" )"

这将$@在函数中设置为单个字符串hi there。如果管道数据是单个字符串或短行文本,这将是一个完全有效的解决方案。为了处理大量数据,请考虑以通常的逐行方式(可能使用awk)代替cat上述函数定义中的调用,并从管道中读取数据,如上面的测试所示。

相关内容