¿Puedo pasar argumentos que sean opciones de AWK directamente a un script AWK puro?
Guión de ejemplo:
#!/usr/bin/env -S awk -f
BEGIN { if (ARGV[1] == "-h") print "whoop" }
Quiero ./myscript -h
imprimir gritos. Pero AWK obtiene -h primero e imprime su uso.
Correr ./myscript -- -h
funciona, pero no puedo trabajar en el shebang debido a -f.
Sé que podría usar un script de shell con AWK en su lugar.
Respuesta1
Por el bien del desafío, se podría hacer con FreeBSD.env
o con GNUambiente>= 8,30 (ya asumido por el OP) en un tinglado:
#! /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
Sin embargo, eso no significa que sea una buena idea.
En su lugar, podrías probar esto:
#! /bin/sh
BEGIN { 2>"/dev/null"
exec awk -f "$0" "--" "$@"
}
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
Esto supone que no tienes un BEGIN
comando en tu archivo PATH
.
Respuesta2
Si tienes GNU awk
puedes usar esto.
#!/usr/bin/gawk --exec
BEGIN { print "==>",ARGV[1],"<==" }
Uso de muestra
./a -h
==> -h <==
No lo he probado, pero la mawk
variante parece usar -W exec
en lugar de --exec
. GNU gawk
afirma que también admite esto, pero no funciona con #!
.