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