Warum funktioniert dieser Befehl nicht als Alias?

Warum funktioniert dieser Befehl nicht als Alias?

Ich habe den folgenden Befehl verwendet, um die zehn größten Dateien im aktuellen Verzeichnis in beliebiger Tiefe aufzulisten:

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print $0}'

(Ich verwende awkanstelle von , headum zu verhindern, dassFehler „Rohrbruch“wenn die Liste zu lang ist)

Es funktioniert gut, aber es ist offensichtlich schwer, sich das jedes Mal zu merken und einzugeben. Ich habe versucht, es in .bash_aliases einzufügen, aber dann funktioniert es nicht (es werden 10 leere Zeilen gedruckt).

Wenn ich lessanstelle von verwende awk, wird die Ausgabe richtig dargestellt. Das bedeutet aber, dass die gesamte Liste der Dateien, die größer als 10 MB (mein unterer Grenzwert) sind, nach Größe sortiert angezeigt wird und nicht nur die obersten.

Was also führt awkhier als Teil eines Alias-Befehls zu einem Choke (vorausgesetzt, das ist tatsächlich das Problem) und was kann ich tun, um es zu beheben?

Antwort1

Wenn Sie diesen Befehl als Alias ​​verwenden, $0ist er nicht mehr durch einfache Anführungszeichen geschützt und wird in Ihren Shell-Namen umgewandelt. Diese Befehle demonstrieren dies:

$ alias F="echo '$0'"      
$ F
bash

Der Shell-Name (vermutlich bash) ist zufällig ein nicht gesetzterawkVariablenname, was zu leeren Zeilen führt.

Eine Möglichkeit zum Schutz $0vor Shell-Erweiterungen wäre die Verwendung von etwas wie:

alias F="find -type f -size +1k -exec ls -gGsSh1 {} + | awk 'NR<=10 {print \$0}'"

Da dies jedoch $0nutzlos ist, können Sie es einfach aus der awkAnweisung entfernen.

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print}'

Sie können noch weiter gehen und den gesamten Block entfernen, da das Drucken der ausgewählten Zeile awkohnehin das Standardverhalten ist:

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10'

Alternativ können Sie einfach weiterarbeiten headund die Fehlermeldung ignorieren:

find -type f -size +10M -exec ls -gGsSh1 {} + 2>&1 | head

verwandte Informationen