Ich möchte die Größe eines vom Benutzer als Argument angegebenen Verzeichnisses erhalten. Beispiel:
read -p "Enter the directory" target
du -k $target
Wenn der Benutzer den Pfad so eingibt ~/Documents/dir
, erhalte ich die Fehlermeldung:du: cannot access '~/Documents/dir': No such file or directory
Wenn ich den Befehl hingegen wie folgt eingebe:
du -k ~/Documents/dir
Ich erhalte die gewünschte Ausgabe.
Warum kann ich keine Variablen zusammen mit dem du-Befehl verwenden?
Antwort1
Das ~
wird weder erweitert, nachdem es über die Shell eingelesen wurde, noch wenn es in den du
Befehl eingefügt wird. Sie können bash mit dem folgenden Code dazu zwingen, die Erweiterung durchzuführen:
read -p "Enter the directory" target
target=${target/#\~/$HOME}
du -k "${target}"
Dies ${target/#\~/$HOME}
ist der wichtige Teil. Er wird ~
durch den Inhalt der HOME
Umgebungsvariablen ersetzt.