it-swarm.com.de

Kombiniert `mkdir` und` cd`?

gibt es eine Möglichkeit (was ist der einfachste Weg in Bash), Folgendes zu kombinieren:

mkdir foo
cd foo

Die Manpage für mkdir beschreibt so etwas nicht, vielleicht gibt es eine schicke Version von mkdir? Ich weiß, dass cd Shell eingebaut sein muss, also würde das gleiche für das schicke mkdir... gelten.

Aliasing?

141
Jasper

Funktion?

mkcdir ()
{
    mkdir -p -- "$1" &&
      cd -P -- "$1"
}

Fügen Sie den obigen Code in das ~/.bashrc Oder eine andere Datei ein, die vom ~/.bashrc Bezogen wird. Starten Sie dann das Terminal neu, damit die Änderungen übernommen werden.

Danach führen Sie einfach mkcdir foo Oder mkcdir "nested/path/in quotes" Aus.

Anmerkungen:

  • "$1" Ist das erste Argument des Befehls mkcdir. Anführungszeichen schützen das Argument, wenn es Leerzeichen oder andere Sonderzeichen enthält.
  • -- Stellt sicher, dass der übergebene Name für das neue Verzeichnis nicht als Option für mkdir oder cd interpretiert wird, und bietet die Möglichkeit, ein Verzeichnis zu erstellen, das mit - oder --.
  • Mit -p, Das für mkdir verwendet wird, werden zusätzliche Verzeichnisse erstellt, wenn diese noch nicht vorhanden sind, und mit -P Werden cd symbolische Links aufgelöst.
114
Ouki

Ich denke, das Erstellen einer Funktion ist der am besten geeignete Weg, um dies zu tun, aber nur um alle alternativen Wege aufzulisten, könnten Sie schreiben:

mkdir foo && cd "$_"

$_ist ein spezieller Parameter, der das letzte Argument des vorherigen Befehls enthält. Das Zitat um $_ Stellen Sie sicher, dass es auch dann funktioniert, wenn der Ordnername Leerzeichen enthält.

Warum doppelte Anführungszeichen verwenden?

In einigen Shells, wie z. B. zsh, werden die doppelten Anführungszeichen um $_ sind auch dann nicht erforderlich, wenn der Verzeichnisname Leerzeichen enthält. Sie sind jedoch erforderlich, damit dieser Befehl in bash funktioniert.

Beispiel: Ausführen dieses Befehls in bash 3.2.57 unter macOS 10.13.6:

mkdir "my directory" && cd $_

ergebnisse in dieser Ausgabe:

bash: cd: my: No such file or directory

Wenn wir jedoch $_ mit doppelten Anführungszeichen gibt der Befehl erfolgreich zurück.

bash-3.2$ mkdir "my directory" && cd "$_"
bash-3.2$ echo $?
0
bash-3.2$
256
Zajn

Bash (unter Verwendung von Word-Bezeichnern):

/tmp/bug$ mkdir "some dir"
/tmp/bug$ cd !$
cd "some dir"
/tmp/bug/some dir$ 

!$ Wird zum letzten Argument der vorherigen Zeile im Verlauf erweitert. Wenn Sie dazwischen Parameter haben, können Sie !:1 Für das erste Argument, !:2 Für das zweite Argument usw. verwenden.

Aus Bash (1):

Ereignisbezeichner

Ein Ereignisbezeichner ist eine Referenz auf einen Befehlszeileneintrag in der Verlaufsliste. Sofern die Referenz nicht absolut ist, beziehen sich Ereignisse auf die aktuelle Position in der Verlaufsliste.

! Starten Sie eine Verlaufsersetzung, es sei denn, es folgt ein Leerzeichen, ein Zeilenumbruch, ein Wagenrücklauf, = Oder ( (Wenn die Extglob-Shell-Option mit dem integrierten Shopt aktiviert ist).

[..]

Wortbezeichner

Wortbezeichner werden verwendet, um gewünschte Wörter aus dem Ereignis auszuwählen. Ein : Trennt die Ereignisspezifikation vom Word-Bezeichner. [..]

[..]
n Das n - th Wort.
^ Das erste Argument. Das heißt, Wort 1.
$ Das letzte Wort. Dies ist normalerweise das letzte Argument, wird jedoch auf das nullte Wort erweitert, wenn nur ein Wort in der Zeile vorhanden ist.

17
Lekensteyn

Diese anderen Jungs machen das Leben nur kompliziert, hier ist es:

eval {mkdir,cd}\ FOLDER\;
10
Sean D