Existe um atalho para mkdir foo e imediatamente cd nele?

82

Isso é algo que faço com frequência

$ mkdir foo
$ cd foo

Isso funciona como um único comando, mas são mais pressionamentos de tecla e não economizam 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
}
    
por macek 15.06.2010 / 16:22

9 respostas

40

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

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

PS Obrigado ao Dennis por usar command mkdir .

    
por 15.06.2010 / 16:29
90

As conchas bash , zsh

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 $_

A variável de comando $_ (underscore do dólar) 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 , a saída será a seguinte:

foo bar
bar baz

O fish Shell

No shell 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 percorre o histórico dos parâmetros de comando.

    
por 12.08.2011 / 13:26
16

Para usuários oh-my-zsh :% $ take 'directory_name'

Referência: link

    
por 12.07.2015 / 17:39
10

E sobre:

$ mkdir newdirname; cd $_

É um pouco mais fácil do que usar o & & amp ;, combinando as respostas do Quack Quixote e do kzh.

    
por 14.03.2012 / 03:09
7

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 em seu caminho no seu arquivo ~ / .profile). Então você pode simplesmente ligar.

    
por 15.06.2010 / 16:30
5
$echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc
$mkcd < pathtofolder/foldername >
    
por 19.09.2013 / 08:01
0

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

Falha se o diretório já existe

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

Altere o diretório independentemente

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

Uso mkcd alguns / path / to / my / dir

    
por 13.10.2015 / 13:51
0

Descobri que a função abaixo só pode criar 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'"
}
    
por 20.12.2017 / 06:32
0

Aqui está uma função simples que eu coloco no meu arquivo ~/.config/fish/config.fish que realiza essa tarefa:

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

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

    
por 23.07.2018 / 14:30