¿Hay un atajo para mkdir foo e inmediatamente cd en él?


89

Esto es algo que hago frecuentemente

$ mkdir foo
$ cd foo

Esto funciona como un solo comando, pero es más pulsaciones de teclas y no ahorra tiempo.

$ mkdir foo && cd foo

¿Hay un atajo para esto?

Editar

Con el uso de ayuda a continuación, esta parece ser la respuesta más 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
Puede cambiar el nombre de la función a mkdirsi la usa en command mkdir $1lugar de solo mkdir $1en el cuerpo de la función.
Andy

2
(1) ¿por qué no simplemente "mkdir $ 1; cd $ 1" en lugar de "&&"? de esa manera el "cd" tiene éxito incluso si el "mkdir" falla, y no necesita el andamiaje de si ya existe. (2) como está escrito, su función no funcionará (para solicitarle un nombre de directorio). necesita poner eso en una cláusula "if" separada de la prueba de existencia (actualmente en "elif").
quack quijote

Respuestas:


45

No soy un experto en Linux / bash, pero intenta poner esto en tu .bashrc.

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

PD: Gracias a Dennis por usar command mkdir.


2
En lugar de `which mkdir`, solo úsalo command mkdir.
Dennis Williamson

1
Gracias Dennis No hay nada debajo man command, ¿podría dirigirme a una referencia? (Puedo resolver lo que hace, pero vale la pena ser minucioso;)
Andy

2
commandse describe en el manual debash (que está integrado; no es un comando separado). También podrías intentarlo help command.
Grawity

Eso también funciona para zsh por cierto
Florian Loch

94

El bash, zshconchas

Si no desea que otra función recuerde y no le importe el basismo:

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

La $_variable de comando bash (subrayado en dólares) contiene el parámetro más reciente. Entonces, si un usuario escribiera lo siguiente en la línea de comando:, echo foo bar && echo $_ bazla salida sería la siguiente:

foo bar
bar baz

La fishcáscara

En la concha de pescado, escribiría lo siguiente:

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

La tecla alt combinada con la tecla de flecha hacia arriba o hacia abajo pasará por el historial de parámetros de comando.


44
Esto también funciona zsh.
Nabil Kadimi

3
¿Puedes explicar qué es $ _? Novato aquí.
arg20

@NabilKadimi ¿Quiso decir que <kbd> Alt <kbd> + <kbd> ⬆ <kbd> funciona bien en Zsh? En realidad, con zsh 5.4.2 y on-my-zsh, Alt + ⬆ me da el carácter 'A'.
Fin de semana

¡+1 por $ _ - Estúpidos Flandes Sexy!
cig0


10

Qué pasa:

$ mkdir newdirname; cd $_

Es un poco más fácil que usar &&, combinando las respuestas de quack quixote y kzh.


26
El punto &&es que cdno se ejecutará si el mkdircomando falla
slhck

1
@slhck en realidad ese era el punto del quijote: cd incluso si mkdir falla (por ejemplo, si ya existe, lo que obliga al usuario a escribir un segundo comando para realmente cd en la ruta). Sin embargo, al contrario de lo que dice esta respuesta, no es fácil: && no es más complicado que;.
moala

7

Puedes probar algo como esto:

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

Guarde este script en algún lugar que esté en su ruta, por ejemplo, / usr / local / bin o ~ / bin (debe colocar este último en su ruta en su archivo ~ / .profile). Entonces puedes simplemente llamarlo.


44
¿Cómo puede funcionar esto? parece solo cddentro del contexto de la ejecución del ~/bin/mkcdscript, no el llamador del script.
Erik Allik

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

2

Aquí hay una función simple que puse en mi ~/.config/fish/config.fisharchivo que realiza esta tarea:

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

La -pvetiqueta permite la creación de directorios con subdirectorios.


0

Dependiendo del resultado deseado si el directorio ya existe.

Falla si el directorio ya existe

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

Cambiar directorio independientemente

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

Uso de mkcd some / path / to / my / dir


0

Descubrí que la siguiente función solo puede hacer un directorio, si quiero hacer subdirectorios al mismo tiempo, no funciona:

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

Así que lo cambié y ahora funciona muy bien.

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.