AWK를 우회하여 AWK 스크립트에 옵션 전달

AWK를 우회하여 AWK 스크립트에 옵션 전달

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. --execGNU는 gawk이 기능도 지원한다고 주장하지만 #!.

관련 정보