C'è una scorciatoia per mkdir foo e immediatamente cd in esso?


89

Questo è qualcosa che faccio di frequente

$ mkdir foo
$ cd foo

Funziona come un singolo comando, ma è più sequenze di tasti e non fa risparmiare tempo.

$ mkdir foo && cd foo

C'è una scorciatoia per questo?

modificare

Con l'uso dell'aiuto di seguito, questa sembra essere la risposta più elegante.

# ~/.bashrc
function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

1
È possibile rinominare la funzione mkdirse si utilizza command mkdir $1invece che solo mkdir $1nel corpo della funzione.
Andy,

2
(1) perché non semplicemente "mkdir $ 1; cd $ 1" invece di "&&"? in questo modo il "cd" ha successo anche se il "mkdir" fallisce, e non è necessario il ponteggio già esistente. (2) come scritto la tua funzione non funzionerà (per richiedere un nome di directory). devi metterlo in una clausola "if" separata dal test di esistenza (attualmente in "elif").
Quack Quixote,

Risposte:


45

Non sono un esperto di Linux / bash, ma prova a metterlo nel tuo .bashrc.

function mkdir
{
  command mkdir $1 && cd $1
}

PS Grazie a Dennis per l'utilizzo command mkdir.


2
Invece di `which mkdir`, basta usare command mkdir.
Dennis Williamson,

1
Grazie Dennis. Non c'è niente sotto man command: potresti indicarmi un riferimento? (Posso capire cosa fa, ma paga per essere accurato;)
Andy,

2
commandè descritto nel manuale dibash (di cui è incorporato; non è un comando separato). Potresti anche provare help command.
Grawity

Questo funziona anche per zsh btw
Florian Loch il

94

I bash, zshconchiglie

Se non vuoi che un'altra funzione ricordi e non ti dispiace i bashismi:

$ mkdir /home/foo/doc/bar && cd $_

La $_variabile di comando bash (carattere di sottolineatura in dollari) contiene il parametro più recente. Quindi, se un utente dovesse digitare quanto segue nella riga di comando:, echo foo bar && echo $_ bazl'output sarebbe il seguente:

foo bar
bar baz

The fishShell

Nella shell di pesce, digitarei quanto segue:

> mkdir / home / foo / doc / bar
> cd alt + ↑

Il tasto alt combinato con il tasto freccia su o freccia giù scorrerà la cronologia dei parametri di comando.


4
Anche questo funziona zsh.
Nabil Kadimi,

3
Puoi spiegare cos'è $ _? Newbie qui.
arg20,

@NabilKadimi Intendevi dire che <kbd> Alt <kbd> + <kbd> ⬆ <kbd> funziona bene in Zsh? In realtà, con zsh 5.4.2 e on-my-zsh, Alt + ⬆ mi dà il carattere 'A'.
Weekend

+1 per $ _ - Stupid Sexy Flanders!
cig0


10

Che dire:

$ mkdir newdirname; cd $_

È un po 'più semplice dell'uso di &&, che combina le risposte di Quack Quixote e KZH.


26
Il punto &&è che cdnon verrà eseguito se il mkdircomando fallisce
slhck

1
@slhck in realtà quello era il punto di quixote: cd anche se mkdir fallisce (per esempio se esiste già, costringendo l'utente a scrivere un secondo comando per inserire effettivamente il cd nel percorso). Tuttavia, contrariamente a quanto dice questa risposta, non è per facilità: && non è più complicato di;
Moala,

7

Puoi provare qualcosa del genere:

#!/bin/sh
mkdir $1 && cd $1

Salvare questo script in un punto del percorso, ad esempio / usr / local / bin o ~ / bin (è necessario inserire quest'ultimo nel percorso nel file ~ / .profile). Quindi puoi semplicemente chiamarlo.


4
come può funzionare? sembra solo cdall'interno del contesto dell'esecuzione dello ~/bin/mkcdscript, non del chiamante dello script.
Erik Allik,

5
$echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc
$mkcd < pathtofolder/foldername >

2

Ecco una semplice funzione che ho inserito nel mio ~/.config/fish/config.fishfile che compie questo compito:

function mkcd
    mkdir -pv $argv;
    cd $argv;
end

Il -pvtag consente la creazione di directory con sottodirectory.


0

A seconda del risultato desiderato se la directory esiste già.

Fallito se la directory esiste già

mkcd() {
    mkdir $1 && cd $1
}

Cambia directory a prescindere

mkcd() {
    mkdir $1 ; cd $1
}

Uso mkcd alcuni / path / to / mio / dir


0

Ho scoperto che la seguente funzione può creare solo una directory, se voglio creare sottodirectory allo stesso tempo, non funziona:

function mkdir
{
  command mkdir $1 && cd $1
}

Quindi l'ho cambiato e ora funziona alla grande!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.