Verifique se nenhum argumento de linha de comando e STDIN está vazio

1

Como verificar, em um script Bash, que nenhum argumento de linha de comando ou STDIN foi fornecido?

Quero dizer, se eu corro:

#> ./myscript.sh
... Show message "No data provided..." and exit

Ou:

#> ./myscript.sh filename.txt
... Read from filename.txt

Ou:

#> ./myscript.sh < filename.txt**
... Read from STDIN
    
por Vitaliy Vikhasty 28.11.2018 / 11:56

1 resposta

3

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 com test ! -t 0 (verifique se o descritor de arquivo zero (também conhecido como stdin ) não está aberto ).

  • E, finalmente, todo o resto fica no último caso ( No data provided... ).

por 28.11.2018 / 12:51