Isso se encaixa nos seus requisitos?
#!/bin/sh
if test -n "$1"; then
echo "Read from $1";
elif test ! -t 0; then
echo "Read from stdin"
else
echo "No data provided..."
fi
Os principais truques são os seguintes:
-
Detectar que você tem um argumento é feito através do
test -n $1
, que está verificando se existe um primeiro argumento. -
Em seguida, verificar se
stdin
não está aberto no terminal (porque é canalizado para um arquivo) é feito comtest ! -t 0
(verifique se o descritor de arquivo zero (também conhecido comostdin
) não está aberto ). -
E, finalmente, todo o resto fica no último caso (
No data provided...
).