Forum: PC-Programmierung Linux Verzeichnis wechseln mit bash script


von Marc (Gast)


Lesenswert?

Hallo zusammen,

unter Windows mache ich mir manchmal batch-files um in der Kommandozeile 
schnell in ein anderes langes Verzeichnis zu wechseln.

also z.B.

x.bat

darin steht

cd c:/Tools/bla/blub/irgendwo

Wenn ich die Batch-Datei laufen lasse, bin ich hinterher im richtigen 
Verzeichnis.

Wenn ich das selbe mit einem Shell-Script unter Linux mache, bin ich 
hinterher immer noch im gleichen Verzeichnis.

Wie macht man so was unter Linux?

von Marius W. (mw1987)


Lesenswert?

Statt das Script auszuführen musst du es "sourcen". Also einfach "source 
<scriptname>" in der bash eintippen.

Gruß
Marius

von Thorsten (Gast)


Lesenswert?

Du musst das Skript mit vorangestelltem Punkt aufrufen. Z.B.:

. foo.sh

Für so einen Fall bietet es sich aber auch an ein Alias zu verwenden 
(Befehl alias)

von shell (Gast)


Lesenswert?

Marc schrieb:
> Wenn ich das selbe mit einem Shell-Script unter Linux mache, bin ich
> hinterher immer noch im gleichen Verzeichnis.
>
> Wie macht man so was unter Linux?

nicht so, wie unter Windows...;-)

Hintergrund, warum es nicht geht: wenn du ein Shell(!)-Script ausführst, 
wird eine neue Shell gestartet, in der die Befehle des Scripts 
ausgeführt werden und die sich danach dann schließt.

Definier dir einen Alias (https://wiki.ubuntuusers.de/alias/).

von foobar (Gast)


Lesenswert?

Du kannst dir auch mal autojump ansehen
https://github.com/wting/autojump

von Marc (Gast)


Lesenswert?

'autojump' macht auf den ersten Blick einen guten Eindruck, aber bis ich 
das installiert habe, bin ich wohl ein Weil unterwegs.

Die Aliase funktionieren gut. Ich werde die verwenden.

Vielen Dank für eure Hilfe :-)

von Andreas B. (andreas_b77)


Lesenswert?

Weitere einfache Möglichkeiten:

Symbolische Links zu den Zielverzeichnissen im Heimverzeichnis anlegen 
und cd in diese. Das cd funktioniert dann aber nur im Heimverzeichnis 
(aber mit cd ohne Verzeichnisnamen kommt man leicht dorthin).

Mit "shopt -s cdable_vars" diese Option aktivieren und die 
Verzeichnispfade in Variablen ablegen. Mit "cd Variablenname" kommt man 
dann ins entsprechende Verzeichnis.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich würde auch den Weg über aliases gehen.

Aber hier noch eine weitere Möglichkeit zur Info, die bei vielen in 
Vergessenheit geraten ist: Mit der Environment-Variablen CDPATH kann man 
Suchpfade für cd einstellen.

Beispiel:
1
   export CDPATH=.:..

sucht erst im aktuellen Pfad, anschließend im übergeordneten. Damit kann 
man ganz leicht "um die Ecke" springen, ohne "../" erst eingeben zu 
müssen.

Beispiel:
1
$ cd /usr
2
$ cd bin
3
/usr/bin
4
$ cd games
5
/usr/games
6
$ cd include
7
/usr/include

cd gibt dann den neuen Pfad automatisch aus, wenn das Verzeichnis über 
den CDPATH gefunden wurde.

Lustig wirds dann mit absoluten Pfadangaben:
1
export CDPATH=.:..:/usr/local
2
$ cd /
3
$ cd share
4
/usr/local/share
5
$ cd /lib
6
$ cd games
7
/usr/local/games

: Bearbeitet durch Moderator
von tictactoe (Gast)


Lesenswert?

Frank M. schrieb:
> Mit der Environment-Variablen CDPATH kann man
> Suchpfade für cd einstellen.
>
> Beispiel:   export CDPATH=.:..

Nein, nein, NEIN!! CDPATH soll man niemals exportieren. Die Chancen 
stehen gut, dass man dadurch ein unaufmerksam geschriebenes Skript ins 
Schleudern bringt, wenn man es aufruft. Das Skript könnte ja cd mit 
relativen Pfaden verwenden und zufällig ein Directory erwischen, das 
über CDPATH erreichbar ist.

Man setzt CDPATH in .bashrc oder .profile, aber exportiert nicht!

von Christopher C. (trihexagon)


Lesenswert?

Welche Distribution verwendest du, dass sich autojump nicht übers 
Standardrepository installieren lässt?

von Dirk D. (dicky_d)


Lesenswert?

Statt autojump hätte ich noch sd im angebot: https://github.com/rylnd/sd
Das macht in etwa das selbe, allerdings direkt in deiner shell

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.