Invoquer un script qui a un awk shebang, avec des paramètres (vars)
Question
J'ai un script awk que j'ai défini ainsi:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
Je l’ai sauvegardé en tant que colonnes
et chmod + x
. Je veux l'invoquer pour que début
et fin
soient définis lors du survol d'un fichier. Je pensais que cela devrait fonctionner:
cat some_file | columns -v start=2
Mais ce n'est pas le cas. Au secours!
La solution
Essayez d’utiliser:
#!/usr/bin/awk -f
en tant qu'interprète
Autres conseils
env est le moyen le plus simple de gérer ce problème:
#!/usr/bin/env -S awk -f
pour ajouter plus d'options et pour éviter toute interférence avec vos arguments et les arguments de awk:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
comme env a un standard POSIX, ce shbang devrait vous aider à surmonter les difficultés de mise en œuvre de shbang non standard sous unixen.
EDIT
après avoir écrit ceci , j'ai réalisé que '-S' est une extension env. FreeBSD non conforme à POSIX . Donc, l’enveloppe de coque est probablement la voie à suivre, bien que cela soit malheureux.
Vous trouverez ci-dessous la réponse à ce problème -
#!/bin/awk -f