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

上記2つの場合アッコマンド/式は、'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

関連情報