gpt4 book ai didi

bash - 如何制作可以从标准输入读取的 bash 函数?

转载 作者:行者123 更新时间:2023-11-29 08:41:14 28 4
gpt4 key购买 nike

我有一些使用参数的脚本,它们工作得很好,但我希望它们能够从标准输入读取,例如从管道读取,例如,假设这称为读取:

#!/bin/bash
function read()
{
echo $*
}

read $*

现在这适用于 read "foo""bar",但我想将其用作:

echo "foo" | read

我该如何实现?

最佳答案

编写一个可以读取标准输入但在没有给出标准输入时可以正常工作的函数有点棘手。如果您只是尝试从标准输入读取,它将阻塞直到它接收到任何输入,就像您只是在提示符下键入 cat 一样。

在 bash 4 中,您可以通过使用参数为 0 的 -t 选项来read 来解决这个问题。如果有可用的输入,它会成功,但是不消耗任何它;否则,它将失败。

这是一个简单的函数,如果它有来自标准输入的任何内容,它的工作方式类似于 cat,否则为 echo

catecho () {
if read -t 0; then
cat
else
echo "$*"
fi
}

$ catecho command line arguments
command line arguments
$ echo "foo bar" | catecho
foo bar

这使得标准输入优先于命令行参数,即 echo foo | catecho bar 将输出 foo。要使参数优先于标准输入(echo foo | catecho bar 输出 bar),您可以使用更简单的函数

catecho () {
if [ $# -eq 0 ]; then
cat
else
echo "$*"
fi
}

(它还具有使用 任何 POSIX 兼容 shell 的优势,而不仅仅是某些版本的 bash)。

关于bash - 如何制作可以从标准输入读取的 bash 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761209/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com