awk 检测标准输入

awk 检测标准输入

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

答案1

您的 perl、ruby 和 php 示例测试 stdin 是否存在。您的 awk 方法只是测试是否应使用 stdin。

您可以使用system("tty")awk 来做到这一点。

答案2

ARGC是存在的命令行参数的数量。 (索引自1

在上述两种情况下awk命令/表达式'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'被视为第一个参数,与是否有任何数据通过管道传输到当前命令无关。

要检查连接到标准输入的终端的文件名:

echo "a" | awk 'BEGIN { "tty" | getline r;  print r == "not a tty"? "stdin" : "no stdin" }'
stdin

awk 'BEGIN { "tty" | getline r;  print r == "not a tty"? "stdin" : "no stdin" }'
no stdin

相关内容