Combinado 'mkdir' e 'cd'? [duplicado]

98

existe alguma maneira (qual é a maneira mais fácil no bash) para combinar o seguinte:

mkdir foo
cd foo

A página manpage para mkdir não descreve nada parecido, talvez exista uma versão sofisticada de mkdir ? Eu sei que cd tem que ser construído em shell, então o mesmo seria verdade para a fantasia mkdir ...

Aliasing?

    
por Jasper 18.04.2014 / 14:36

4 respostas

73

Função?

mkcdir ()
{
    mkdir -p -- "$1" &&
      cd -P -- "$1"
}
    
por 18.04.2014 / 14:41
185

Acho que criar uma função é a maneira mais apropriada de fazer isso, mas apenas para listar todas as formas alternativas, você pode escrever:

mkdir foo && cd "$_"

$_ é um parâmetro especial que contém o último argumento do comando anterior. A citação em torno de $_ garante que funcione mesmo que o nome da pasta contenha espaços.

Em alguns shells, como zsh , as aspas duplas em torno do $_ não são necessárias, mesmo quando o nome do diretório contiver espaços. Eles são necessários para que este comando funcione em bash , no entanto.

Por exemplo, executando este comando no bash 3.2.57 no macOS 10.13.6:

mkdir "my directory" && cd $_

resulta nesta saída:

bash: cd: my: No such file or directory
    
por 18.04.2014 / 20:59
16

Bash (usando designadores de palavras):

/tmp/bug$ mkdir "some dir"
/tmp/bug$ cd !$
cd "some dir"
/tmp/bug/some dir$ 

!$ expande para o último argumento da linha anterior no histórico. Se você tiver parâmetros intermediários, poderá usar !:1 para o primeiro argumento, !:2 para o segundo argumento, etc.

Do bash (1):

Event Designators

An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list.

! Start a history substitution, except when followed by a blank, newline, carriage return, = or ( (when the extglob shell option is enabled using the shopt builtin).

[..]

Word Designators

Word designators are used to select desired words from the event. A : separates the event specification from the word designator. [..]

[..]
n The n-th word.
^ The first argument. That is, word 1.
$ The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line.

    
por 18.04.2014 / 16:08
7

Esses outros caras estão complicando a vida, aqui está:

eval {mkdir,cd}\ FOLDER\;
    
por 18.04.2014 / 18:41