[gelöst] mkdir und cd Kombination

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Meternagel
Beiträge: 56
Registriert: 03.01.2007 18:02:22

[gelöst] mkdir und cd Kombination

Beitrag von Meternagel » 01.02.2016 13:08:24

Hallo Zusammen

Ich bin momentan am shell (bash) lernen und versuche ein Skript zu schreiben, welches die Kommandos mkdir und cd kombiniert. Meine eigenen versuche und Skripte aus dem Netz schlugen bisher aber fehl.

Mein eigenes Skript

Code: Alles auswählen

#!/bin/bash
mkdir "$1" && cd ./"$1"
erstellt das Verzeichnis, wechselt aber nicht dahin.

Das gleiche Problem habe ich mit dem folgenden Skript aus dem Netz:

Code: Alles auswählen

mkcdir ()
{
    mkdir -p -- "$1" &&
      cd -P -- "$1"
}
Quelle: http://unix.stackexchange.com/questions ... dir-and-cd


Kann mir jemand weiterhelfen?
Zuletzt geändert von Meternagel am 04.02.2016 11:05:09, insgesamt 1-mal geändert.

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: mkdir und cd Kombination

Beitrag von 4A4B » 01.02.2016 13:32:37

Code: Alles auswählen

mkcdir ()
{
    mkdir -p -- "$1" &&
      cd -P -- "$1"
}
Diese Funktionsdefinition musst du in ~/.bashrc oder ~/.bash_aliases abspeichern und dann sollte ein Aufruf 'mkcdir bla' in einem neu geöffneten Terminal funktionieren

Edit:

dass dein Script "fehlschlägt", liegt daran, dass nur innerhalb der Subshell (d.h. innerhalb des Scriptes) in das Verzeichnis gewechselt wird

Benutzeravatar
hikaru
Moderator
Beiträge: 13903
Registriert: 09.04.2008 12:48:59

Re: mkdir und cd Kombination

Beitrag von hikaru » 01.02.2016 13:44:34

Variante 1 wechselt durchaus in das erstellte Verzeichnis* (du kannst das z.B. prüfen indem du hinterher im Script noch pwd aufrufst), aber dein Script öffnet eine neue Subshell, und nur in dieser wird das Verzeichnis gewechselt. Wenn das Script beendet ist verlässt du auch die Subshell und in deiner Elternshell hast du das Verzeichnis nie gewechselt.

*) Sofern es existiert - was nicht zwingend der Fall sein muss, da dein mkdir (auch) absolute Pfade akzeptiert, während dein cd nur relative akzeptiert.

uname
Beiträge: 12398
Registriert: 03.06.2008 09:33:02

Re: mkdir und cd Kombination

Beitrag von uname » 01.02.2016 13:47:00

Um z.B. mehrstufige Ordnerstrukturen zu erstellen nutzt man wie oben beschrieben -p:

Code: Alles auswählen

mkdir -p /dieser/pfad/existiert/noch/nicht
In ein Verzeichnis zu wechseln wiederum ist meistens nur schlechte Programmierung. Was willst du da? Was passiert da? Absolute Pfade wären wohl besser und vor allem sicherer. Vor allem wenn du das als "root" ausführst. Da kann eine leere Variable zu einem Totalverlust des Systems führen.

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: mkdir und cd Kombination

Beitrag von Liffi » 01.02.2016 14:32:09

uname hat geschrieben: Was willst du da? Was passiert da? Absolute Pfade wären wohl besser und vor allem sicherer.
Ich denke, er will einfach mkdir und cd im Alltag gleichzeitig durchführen. Oft will man direkt nach dem Erstellen in das Verzeichnis rein, um irgendwas zu machen.

Benutzeravatar
Meillo
Moderator
Beiträge: 9233
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: mkdir und cd Kombination

Beitrag von Meillo » 01.02.2016 14:55:02

(Hin und wieder findet man diesen Befehl auf Rechnern unter dem Namen `md' vor, in Anlehnung an das `mkdir'-Aequivalent in DOS.)
Use ed once in a while!

tobo
Beiträge: 2339
Registriert: 10.12.2008 10:51:41

Re: mkdir und cd Kombination

Beitrag von tobo » 01.02.2016 15:24:36

Wenn es als Skript sein muss und es darum geht, dass der Verzeichniswechsel in der aufrufenden Shell stattfindet, dann sollte man keine neue Subshell öffnen:

Code: Alles auswählen

. script.sh param

Meternagel
Beiträge: 56
Registriert: 03.01.2007 18:02:22

Re: mkdir und cd Kombination

Beitrag von Meternagel » 02.02.2016 17:54:15

Danke Allen für Eure Beiträge :D

Wie Liffi bereits vermutet hat, geht es mir darum, im Alltag, vor allem jetzt beim bash-Lernen, schnell ein Verzeichnis zu erstellen und darin weiter zu arbeiten. Vor allem wenn ich zwischendurch etwas probieren will, hilft mir das, Ordnung zu bewahren.
Zudem war es einfach ein Beispiel zum Lernen. Es macht einfach mehr Spass, wenn man eigene Ideen ausprobieren kann.

Ich habe jetzt beide Vorschläge, von 4A4B und tobo ausprobiert. Funktionieren beide prima.

uname hat geschrieben:Absolute Pfade wären wohl besser und vor allem sicherer.
Um die Funktion kompatibel für absolute Pfadangaben zu machen müsste ich wohl noch eine if-Verzweigung einbauen!?
Würdest Du da die erste Stelle der Variablen auf ein "/" überprüfen?
Oder hast Du andere Möglichkeiten im Kopf?

Antworten