【发布时间】:2015-07-08 13:31:31
【问题描述】:
所以我有一个函数可以选择通过标准输入提供额外的数据,我用cat 抓取它,但是,当没有标准输入时cat 将阻止执行。
这是一个愚蠢的例子:
foo() { echo "$@" "$(cat)"; }
基本上,它通过参数和标准输入来回显作为输入给出的所有内容。
有没有办法防止cat 在这种情况下被阻塞?目前,如果设置了这样做的选项,我只能通过调用cat 来解决这个问题,但似乎我真正需要的只是让cat 在没有什么可读的情况下不返回任何内容。
【问题讨论】:
-
它不知道/不知道没有什么可读的与什么都没有还没有(链接慢,人类还没有开始打字等)你可以尝试使用
read超时来获取第一个字符/行,然后仅在成功的情况下使用cat,但这会因输入缓慢而竞争。 -
好的,但我只对通过管道传输到
foo的内容感兴趣,而不是任意标准输入(应该说),即简单地调用foo是不正确的,它应该要么被称为foo "bar"或echo "bar" | foo,有什么方法可以区分,例如,我可以检查标准输入是否是全局的(与我的脚本得到的相同)? -
您可以使用
test/[-t标志测试标准输入是否为终端。