Der Linux-Befehl „du“ in der Shell-Funktion erzeugt nur eine Ausgabezeile

Der Linux-Befehl „du“ in der Shell-Funktion erzeugt nur eine Ausgabezeile

Ich habe duden folgenden Befehl verwendet, um die Dateinutzung anzuzeigen:

$ sudo du -hsx /* | sort -rh | head -n 40
16G     /home
5.3G    /var
2.6G    /usr
840M    /run
...

Und ich möchte eine Funktion schreiben, die mir wiederkehrende Arbeit erspart:

show_disk() {
    sudo du -hsx "$1" | sort -rh | head -n 40
}

Aber wenn ich diese Funktion ausführe, duwird nur eine Ausgabezeile angezeigt, wie:

$ show_disk() /*
0   /bin

Mir scheint, dass dusich der Befehl in einer Shell-Funktion anders verhält. Was habe ich hier falsch gemacht? Für jede Hilfe wäre ich dankbar.

Antwort1

$1ist das erste Argument. Denken Sie daran, dass es die Shell ist, die Platzhalter erweitert, nicht die App. Es *handelt sich also nicht um ein einzelnes Argument, es sei denn, es stimmt mit nur einer (oder keiner) Datei/Verzeichnis überein.

Sie sollten in Ihrem Skript doppelte Anführungszeichen verwenden, "$@"wenn Sie alle Argumente akzeptieren möchten. (Verwenden Sie dies nicht, $*da es bei Dateinamen mit Leerzeichen zu Problemen kommt.)

verwandte Informationen