无阻塞地读取可选的标准输入

Reading Optional Standard Input Without Blocking

所以我有一个函数可以选择通过标准输入提供额外的数据,我用 cat 抓取它,但是,当没有标准输入时 cat 将阻止执行.

这是一个愚蠢的例子:

foo() { echo "$@" "$(cat)"; }

基本上它会回应通过参数和标准输入作为输入给出的所有内容。

在这种情况下,有什么办法可以防止 cat 阻塞吗?目前,如果设置了这样做的选项,我只能通过调用 cat 来解决这个问题,但似乎我真正需要的只是 cat 到 return 什么都没有如果没有什么可读的。

foo() {
  if [ -t 0 ]
  then
    echo "$@"
  else
    echo "$@" "$(cat)"
  fi
}