Perl, Ruby e PHP podem detectar stdin:
$ perl -e 'print -t ? "no stdin" : "stdin"'
no stdin
$ echo | perl -e 'print -t ? "no stdin" : "stdin"'
stdin
$ ruby -e 'puts $stdin.isatty ? "no stdin" : "stdin"'
no stdin
$ echo | ruby -e 'puts $stdin.isatty ? "no stdin" : "stdin"'
stdin
$ php -r 'print posix_isatty(STDIN) ? "no stdin" : "stdin";'
no stdin
$ echo | php -r 'print posix_isatty(STDIN) ? "no stdin" : "stdin";'
stdin
O Awk tem alguma maneira de fazer isso? Eu tentei o ARGC, mas é o mesmo em ambos os casos:
$ awk 'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
no stdin
$ echo | awk 'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
no stdin
Seus exemplos de perl, ruby e php testam se stdin existe. Sua abordagem awk apenas testa se stdin deve ser usado.
Você pode usar
system("tty")
o awk para fazer isso.Em ambos os casos mencionados, o comando/expressão awk
'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
é considerado como o primeiro argumento, independentemente de qualquer dado ter sido canalizado para o comando atual.Para verificar o nome do arquivo do terminal conectado à entrada padrão: