Ich habe du
den 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, du
wird nur eine Ausgabezeile angezeigt, wie:
$ show_disk() /*
0 /bin
Mir scheint, dass du
sich der Befehl in einer Shell-Funktion anders verhält. Was habe ich hier falsch gemacht? Für jede Hilfe wäre ich dankbar.
Antwort1
$1
ist 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.)