EDIT : alterou -t
para -t 0
, que detecta corretamente a entrada do terminal ou arquivo.
Acho que a chave aqui é saber se sua entrada está vindo de um terminal ou de um arquivo. Há um teste para isso ( man test
, consulte -t
).
Supondo que você esteja executando um script básico:
if [ -t 0 ]; then
echo "Input from terminal"
if [ $# -eq 0 ]; then
echo "No input files specified on command line. Error." >&2
else
echo "Input file given on command line. It is $1"
fi
else
echo "Input coming from stdin"
fi
Você pode manipular os diferentes cenários substituindo o código real pelas declarações de eco acima.
Atualizar, script de teste rápido:
#!/bin/bash
[ -t 0 ] && echo "t is true" || echo "t is false"
Em exibição:
$ test.sh testfile
t is true
$ test.sh < testfile
t is false
$