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
您的 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