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!

War es hilfreich?

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 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top