ubuntuusers.de

Shell Script / cd: change directory

Status: Ungelöst | Ubuntu-Version: Ubuntu 11.10 (Oneiric Ocelot)
Antworten |

sappy

Anmeldungsdatum:
24. Januar 2012

Beiträge: 282

Hallo,

ich habe mir einen Einzeiler gebastelt:

1
cd 

Dieses Script hat z.B. den Namen "probe" und liegt ausführbar in /home/username/bin. In $PATH ist der Pfad natürlich drin. Starte ich "probe" von irgendwo, macht er nichts ☹ Wenn ich aber nicht "cd" nehme, sondern z.B. "echo Hallo" macht er sehr wohl das was in der Datei steht. Woran liegt das, dass er "cd" nicht kann?

Grüße

TomTobin

Avatar von TomTobin

Anmeldungsdatum:
24. August 2007

Beiträge: 3100

Hallo sappy,

sappy schrieb:

ich habe mir einen Einzeiler gebastelt:

1
cd 

Hmm, was soll denn Deiner Meinung nach passieren? Wenn Du "nur" cd im Terminal eingibst und Enter drückst passiert auch nicht die Welt 😉

Ich vermute mal Du möchtest etwas anderes erreichen und dem Befehl evtl. noch einen Parameter mitgeben? Dann fehlt aber noch was z.B. eine Variable...

Gruß

Tom

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Dieses Script hat z.B. den Namen "probe" und liegt ausführbar in /home/username/bin. In $PATH ist der Pfad natürlich drin.

Hat es auch eine Shebang?

#!/bin/bash
cd

?

Woran liegt das, dass er "cd" nicht kann?

Er kann schon 'cd' nur deine Erwartung über die Wirkung von 'cd' ist falsch.

'cd' ist kein Programm, sondern ein sogenanntes Shellbuiltin, d.h. eine Funktion der Shell selbst.

which cd
cd: shell built-in command

Was macht 'cd'? Es ändert das Verzeichnis, der _aktuellen Shell_ in der 'cd' aufgerufen wird.

Wenn du ein Shellscript aufrufst wird eine _neue Shell-Instanz_ gestartet und in dieser wird dann 'cd' ausgeführt, aber das hat keine Auswirkungen auf deine Shell die du gerade benutzt.

Wenn du Shellscripte schreiben willst, die den Zustand deiner aktuellen Shell ändern, geht das daher prinzipiell nicht über Shellscripte, sondern nur über Funktionen.

sappy

(Themenstarter)

Anmeldungsdatum:
24. Januar 2012

Beiträge: 282

Danke für die schnellen Antworten. Mit der Shebang klappt es auch nicht:

1
2
#!/bin/bash
cd

Ich möchte erreichen das ich zum Beispiel nur "probe" eingebe und er soll in der aktiven Shell z.B. immer in das Verzeichnis ~/test/probe wechseln. Wie sehe das mit Funktionen aus?

Grüße

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

Als Funktion:

1
2
3
4
probe()
{
    cd ~/test/probe
}

Oder als Alias:

alias probe='cd ~/test/probe'

Beides müsstest du in deiner „~/.bashrc“ o.ä. definieren.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Jaa - da hast Du etwas mit Skripten und Tochterprozessen noch nicht verstanden ...

Das Skript wird ja nicht in Deiner Originalshell ausgeführt, sondern in seiner eigenen Tochtershell.
Und in der wechselt er auch brav in Dein $HOME- Verzeichnis. Nur, sobald Du diese Tochtershell verlässt (am Ende des Skripts), gilt wieder das alte aktuelle Verzeichnis, denn Variablen werden ja nicht "nach oben" vererbt.

Ich vermute, Du willst eigentlich gar nicht ein Skript haben, sondern eine Shell-Funktion, die Du nur in Deiner ~/.bashrc am Ende dazu schreiben müsstest.

LG,

track

Edit:
Oh, Vain war inzwischen schon schneller ... 😉

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

sappy

Mit der Shebang klappt es auch nicht:

Ich war der Meinung, ich hätte auch erklärt, warum das nicht geht.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

Kinch schrieb:

sappy

Mit der Shebang klappt es auch nicht:

Ich war der Meinung, ich hätte auch erklärt, warum das nicht geht.

Hast Du auch. Aber die Frage nach "Shebang" war in diesem Falle irreführend, denn das Problem bleibt das gleiche - unabhängig von der Shell die das Skript ausführt. ☺

Ciao

robert

Antworten |