AWK 옵션인 인수를 순수 AWK 스크립트에 직접 전달할 수 있나요?
예시 스크립트:
#!/usr/bin/env -S awk -f
BEGIN { if (ARGV[1] == "-h") print "whoop" }
나는 ./myscript -h
웁을 인쇄하고 싶다. 그러나 AWK는 -h를 먼저 가져오고 대신 사용법을 인쇄합니다.
실행은 ./myscript -- -h
작동하지만 -f 때문에 shebang에서 작업할 수 없습니다.
대신 AWK가 포함된 쉘 스크립트를 사용할 수 있다는 것을 알고 있습니다.
답변1
도전을 위해 FreeBSD를 사용하여 수행할 수 있습니다.env
또는 GNU를 사용하여환경>= 8.30 (이미 OP에서 가정함) shebang에서:
#! /usr/bin/env -S sh -c 'exec awk -f "$0" -- "$@"'
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
./myscript -h 1 2 3
-h
1
2
3
하지만 그것이 좋은 생각이라는 뜻은 아닙니다.
대신 다음을 시도해 볼 수 있습니다.
#! /bin/sh
BEGIN { 2>"/dev/null"
exec awk -f "$0" "--" "$@"
}
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
이는 BEGIN
.PATH
답변2
GNU가 있다면 awk
이것을 사용할 수 있습니다
#!/usr/bin/gawk --exec
BEGIN { print "==>",ARGV[1],"<==" }
샘플 사용
./a -h
==> -h <==
테스트 하지는 않았지만 mawk
변형이 -W exec
. --exec
GNU는 gawk
이 기능도 지원한다고 주장하지만 #!
.