Existe um atalho para o mkdir foo e o cd imediatamente?


89

Isso é algo que faço frequentemente

$ mkdir foo
$ cd foo

Isso funciona como um único comando, mas é mais pressionamento de tecla e economiza tempo.

$ mkdir foo && cd foo

Existe um atalho para isso?

Editar

Com o uso da ajuda abaixo, esta parece ser a resposta mais 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
}

11
Você pode renomear a função para mkdirse você usar em command mkdir $1vez de apenas mkdir $1no corpo da função.
Andy

2
(1) por que não simplesmente "mkdir $ 1; cd $ 1" em vez de "&&"? dessa forma, o "cd" será bem-sucedido, mesmo que o "mkdir" falhe, e você não precisará dos andaimes do tipo "ele já existe". (2) conforme escrito, sua função não funcionará (para solicitar um nome de diretório). você precisa colocar isso em uma cláusula "if" separada do teste de existência (atualmente em "elif").
quack quixote

Respostas:


45

Eu não sou especialista em Linux / bash, mas tente colocar isso no seu .bashrc.

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

PS Obrigado a Dennis por usar command mkdir.


2
Em vez de `which mkdir`, basta usar command mkdir.
Dennis Williamson

11
Obrigado Dennis. Não há nada embaixo man command- você poderia me indicar uma referência? (Eu posso descobrir o que ele faz, mas vale a pena ser completa;)
Andy

2
commandé descrito no manual debash (do qual é incorporado; não é um comando separado). Você também pode tentar help command.
grawity

Isso também funciona para o zsh btw
Florian Loch

94

Os bash, zshShells

Se você não quer que outra função se lembre e não se importe com basismos:

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

A $_variável de comando bash (sublinhado do dólar) contém o parâmetro mais recente. Portanto, se um usuário digitar o seguinte na linha de comando:, echo foo bar && echo $_ baza saída será a seguinte:

foo bar
bar baz

The fishShell

Na casca do peixe, digitei o seguinte:

> mkdir / página inicial / foo / doc / bar
> cd alt + ↑

A tecla alt combinada com a tecla de seta para cima ou para baixo percorre o histórico de parâmetros do comando.


4
Isso funciona zshtambém.
Nabil Kadimi

3
Você pode explicar o que $ _ é? Novato aqui.
arg20

@NabilKadimi Você quis dizer que <kbd> Alt <kbd> + <kbd> ⬆ <kbd> funciona bem no Zsh? Na verdade, com zsh 5.4.2 e on-my-zsh, Alt + ⬆ me dá o caractere 'A'.
Fim de semana

+1 para os $ _ - Standy Sexy Flanders!
cig0 29/06


10

Sobre:

$ mkdir newdirname; cd $_

É um pouco mais fácil do que usar &&, combinando as respostas de Quack Quackote e Kzh.


26
O ponto de &&é que cdnão será executada se o mkdircomando falhar
slhck

11
@slhck, na verdade, esse era o objetivo do quixote: cd, mesmo que o mkdir falhe (por exemplo, se ele já existir, forçando o usuário a escrever um segundo comando para realmente fazer o cd no caminho). No entanto, ao contrário do que essas respostas dizem, isso não é fácil: && não é mais complicado que;.
moala 02/02

7

Você pode tentar algo como isto:

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

Salve este script em algum lugar que esteja no seu caminho, por exemplo, / usr / local / bin ou ~ / bin (você deve colocar este último no caminho no seu arquivo ~ / .profile). Então você pode simplesmente chamá-lo.


4
como isso pode funcionar? parece apenas cddentro do contexto da execução do ~/bin/mkcdscript, não o chamador do script.
precisa

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

2

Aqui está uma função simples que eu coloquei no meu ~/.config/fish/config.fisharquivo que realiza esta tarefa:

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

A -pvtag permite a criação de diretórios com subdiretórios.


0

Dependendo do resultado desejado, se o diretório já existir.

Falha se o diretório já existir

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

Alterar diretório independentemente

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

Uso mkcd some / path / to / my / dir


0

Eu descobri que a função abaixo pode criar apenas um diretório, se eu quiser criar subdiretórios ao mesmo tempo, isso não funciona:

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

Então eu mudei e agora está funcionando muito bem!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.