Use read -t 0 -N 0
para detectar se os dados estão disponíveis no stdin. Use test -t 0
ou tty
para tentar detectar se um pipe está conectado a stdin.
Meu problema é que eu quero um script que leia o conteúdo de um canal, verifique se está vazio e imprima se não estiver, como visto aqui:
#!/bin/bash
var=$(cat -)
if [ -n "$var" ]
then
echo "$var"
else
echo "Pipe was empty"
fi
O problema é que cat lê de stdin, se o pipe estiver vazio. Existe alguma maneira de impedir que o gato faça isso? Ou o gato é a ferramenta errada para usar aqui?
test -t 0
, não funcionou no meu caso, e as pessoas aqui dizem que é "não-determinístico" ou algo assim. Eu gosto da solução de wc -c
(count bytes), agradável e simples. A entrada vazia tem 1 byte, enquanto que um único caractere, por ex. echo "a" | wc -c
dá 2
| (read line; if [ $(echo "$line" | wc -c) -gt 1 ]; then echo "$line"; fi) |
Esta saída permanece habilitada para canos, graças aos parênteses em torno de read; if ...
Consulte este Q & A