Awk

awk 檢測標準輸入

  • March 31, 2018

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 中使用來做到這一點。

**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

引用自:https://unix.stackexchange.com/questions/434678