Perl、Ruby 和 PHP 可以检测标准输入:
$ 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
awk 有办法做到这一点吗?我尝试了 ARGC,但在这两种情况下都是一样的:
$ awk 'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
no stdin
$ echo | awk 'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
no stdin
您的 perl、ruby 和 php 示例测试标准输入是否存在。您的 awk 方法只是测试是否应该使用标准输入。
你可以
system("tty")
在 awk 中使用来做到这一点。在上述两种情况下,awk命令/表达式
'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
都被视为第一个参数,与是否有任何数据通过管道传输到当前命令无关。要检查连接到标准输入的终端的文件名: