2009-06-10 6 views
2

Hier ist ein Bash-Skript Ich arbeite an:Seltsame Fehler zu überprüfen, ob Verzeichnis mit Bash-Skript existiert

dir="~/path/to/$1/folder" 

if [ -d "$dir" ]; then 
    # do some stuff 
else 
    echo "Directory $dir doesn't exist"; 
    exit 1 
fi 

und wenn ich es vom Terminal laufen:

> ./myscript.sh 123 
Directory ~/path/to/123/folder doesn't exist

Aber das Ordner eindeutig tut existieren. Dies funktioniert normal:

> ls ~/path/to/123/folder

Was mache ich falsch?

Antwort

1

Versuch:

dir="$HOME/path/to/$1/folder" 
+2

Nur weil Joakim überhaupt keine Erklärung lieferte: Sie hatten das ~ zitiert. ~ expandiert nur in bash während der Tilde-Erweiterung, aber alles, was du zitierst, deaktivierst du die spezielle Bedeutung von, also bedeutet die Tilde (~) nicht länger "expandiert zum Home-Verzeichnis des aktuellen Benutzers". Es bedeutete nur: "das Verzeichnis im aktuellen Verzeichnis namens ~". Was nicht existiert, daher der Fehler. – lhunath

5

Das Problem ist, dass bash Tilde-Erweiterung vor Shell-Parametern Substitution durchführt, so, nachdem er ~/path/to/folder für $dir ersetzt, es nicht versucht, die ~ zu erweitern, so sieht es aus für ein Verzeichnis buchstäblich mit einer Tilde in ihm benannt, die gibt es natürlich nicht. Eine detailliertere Erklärung der Erweiterungen von bash finden Sie unter section 3.5 of the bash manual.

+1

Ah danke für die Erklärung! – nickf

Verwandte Themen