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バリエーションはこれをサポートするために.GNUの主張-W execの代わりに使用しているようですが。--execgawk#!

関連情報