Aufrufen eines Skripts, das eine awk shebang hat, mit Parametern (Vars)
Frage
Ich habe einen awk-Skript, das ich so definiert habe:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
Ich habe es als columns
gespeichert und chmod +x
'd es. Ich will es aufrufen, so dass start
und end
definiert sind, wenn sie über eine Datei durchläuft. Ich dachte, dies sollte funktionieren:
cat some_file | columns -v start=2
Aber es funktioniert nicht. Hilfe!
Lösung
Versuchen Sie es mit:
#!/usr/bin/awk -f
als Dolmetscher
Andere Tipps
env ist der einfachste Weg, um dieses Problem zu umgehen:
#!/usr/bin/env -S awk -f
, um weitere Optionen hinzuzufügen und keine Interferenzen mit Ihren Argumenten zu gewährleisten, und awk Argumente:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
als env ein POSIX-Standard hat, diese shbang sollten Sie rund um die Schwierigkeiten bei der Nicht-Standard-shbang Implementierungen in unixen erhalten.
EDIT
danach geschrieben zu haben Ich erkennen, dass 'ES' ist ein nicht-POSIX FreeBSD env Erweiterung compliant . So Shell-Wrapper ist wahrscheinlich der Weg zu gehen, unglücklich, wie das ist.
Im Folgenden finden Sie die Antwort für dieses Problem -
#!/bin/awk -f