Bash - 检查标准输入是否包含任何内容

问题描述 投票:0回答:1

我知道这个问题已经被问过好几次了,但对我来说似乎无效。

[[ ! -t 0 ]]
= 标准输入包含任何内容吗?

这个命令:

echo 'Hello world' | [[ ! -t 0 ]]
echo $?

给出正确的输出:

0
,即标准输入包含任何内容。
这个命令:

[[ ! -t 0 ]]
echo $?

给出正确的输出:

1
,即标准输入为空。
相反,这个命令:

: | [[ ! -t 0 ]]
echo $?

给出意想不到的输出:

0
,而标准输入为空时:
1

为什么会这样?我该如何解决这个问题?

bash shell stdin
1个回答
0
投票

为什么会这样

-t
检查文件描述符是否连接到 tty。

我该如何解决这个问题?

读取 1 个字节。如果你读过它,它就不是空的,否则它就是空的。

... | (
   if read -n 1; then
       echo 'Not empty!' >&2
       # forward data along
       printf "%s" "$REPLY"
       cat
   else
       echo 'empty!' >&2
   fi
) | ....
© www.soinside.com 2019 - 2024. All rights reserved.