
Wenn ich das mache cd "user/Dropbox/foo.txt"
, bekomme ich -bash: cd: user/Dropbox/foo.txt: Not a directory
. Aber meine Absicht ist in diesem Fall immer die gleiche: Ich möchte cd
in das Verzeichnis, in dem sich die Datei befindet.
Ich habe Folgendes versucht:
function smartcd
{
dirname=$(dirname "$1");
cd $dirname;
}
Dies funktioniert jedoch nicht, da, wenn $1 ein Verzeichnis ist, dirname "$1"
das übergeordnete Verzeichnis und nicht das Verzeichnis selbst zurückgegeben wird.
Wie kann ich einen Befehl erstellen, der in das Verzeichnis selbst wechselt, wenn es $1
sich um ein Verzeichnis handelt, bzw. in das Verzeichnis, in dem sich die Datei befindet, wenn es $1
sich um eine Datei handelt?
Antwort1
Ich denke, Sie möchten zunächst $1 für eine Datei testen:
wenn test -f "$1"; dann cd dirname ...
sonst cd "$1" fi