Função?
mkcdir ()
{
mkdir -p -- "$1" &&
cd -P -- "$1"
}
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?
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
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.
Esses outros caras estão complicando a vida, aqui está:
eval {mkdir,cd}\ FOLDER\;
Tags bash mkdir cd-command