我知道这个问题已经被问过好几次了,但对我来说似乎无效。
[[ ! -t 0 ]]
= 标准输入包含任何内容吗?
这个命令:
echo 'Hello world' | [[ ! -t 0 ]]
echo $?
给出正确的输出:
0
,即标准输入包含任何内容。[[ ! -t 0 ]]
echo $?
给出正确的输出:
1
,即标准输入为空。: | [[ ! -t 0 ]]
echo $?
给出意想不到的输出:
0
,而标准输入为空时:1
。
为什么会这样?我该如何解决这个问题?
为什么会这样
-t
检查文件描述符是否连接到 tty。
我该如何解决这个问题?
读取 1 个字节。如果你读过它,它就不是空的,否则它就是空的。
... | (
if read -n 1; then
echo 'Not empty!' >&2
# forward data along
printf "%s" "$REPLY"
cat
else
echo 'empty!' >&2
fi
) | ....