Questão Existe um atalho para mkdir foo e imediatamente cd nele?


Isso é algo que faço com frequência

$ mkdir foo
$ cd foo

Isso funciona como um único comando, mas é mais pressionamentos de teclas e não 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
}

81


origem


Você pode renomear a função para mkdir se você usar command mkdir $1 em vez de apenas mkdir $1 no corpo da função. - Andy
(1) por que não simplesmente "mkdir $ 1; cd $ 1" em vez de "&&"? Dessa forma, o "cd" é bem-sucedido, mesmo que o "mkdir" falhe, e você não precisa do andaime "já não 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:


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

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

PS Graças a Dennis por usar command mkdir.


38



Ao invés de `which mkdir`, Apenas use command mkdir. - Dennis Williamson
Obrigado Dennis. Não há nada sob man command - você poderia me indicar uma referência? (Eu posso descobrir o que ele faz, mas vale a pena ser completo;) - Andy
command é descrito em o manual de bash (que é um built-in, não é um comando separado). Você também pode tentar help command. - grawity
Isso também funciona para zsh btw - Florian Loch


o bash, zsh Cartuchos

Se você não quiser que outra função se lembre e não se importe com os bashisms:

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

o $_ (dollar underscore) A variável de comando bash contém o parâmetro mais recente. Portanto, se um usuário digitar o seguinte na linha de comando: echo foo bar && echo $_ baz, então a saída seria a seguinte:

foo bar
bar baz

o fish Concha

Na casca de peixe, eu digitaria o seguinte:

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

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


89



Isso funciona em zsh também. - Nabil Kadimi
Você pode explicar o que é $ _? Novato aqui. - arg20


Para oh-meu-zsh Comercial:
$ take 'directory_name' 

Referência: https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet


14



Você pode explicar isso com mais detalhes? - bwDraco


Sobre o quê:

$ mkdir newdirname; cd $_

É um pouco mais fácil do que usar o &&, combinando as respostas do quack quixote e do kzh.


10



O ponto de && é aquele cd não será executado se o mkdir comando falha - slhck
@slhck, na verdade, esse era o ponto do quixote: cd, mesmo que o mkdir falhasse (por exemplo, se ele já existe, forçando o usuário a escrever um segundo comando para realmente gravar no caminho). No entanto, ao contrário do que esta resposta diz, não é por facilidade: && não é mais complicado do que; - moala


Você pode tentar algo assim:

#!/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ê tem que colocar este último no seu caminho no seu arquivo ~ / .profile). Então você pode simplesmente ligar.


7



como isso pode funcionar? parece que só cd dentro do contexto da execução do ~/bin/mkcd script, não o chamador do script. - Erik Allik


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

5





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

Falha se o diretório já existir

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

Alterar o diretório, independentemente

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

Uso mkcd alguns / caminho / para / meu / dir


0





Eu achei que a função abaixo só pode fazer um diretório, se eu quiser fazer subdiretórios ao mesmo tempo, 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`"
}

0