
Então aqui eu criei, ou pelo menos tentei criar um alias para um comando que aceita um argumento de linha de comando, cria um novo diretório com esse nome e vai até ele.
alias newfolder='mkdir $2 ; cd "$(history | tail -2 | awk '\''NR == 1'\'' | awk '\''{print $3}'\'')"'
O alias foi criado com sucesso, mas quando desejo executar o comando com um argumento de linha de comando, recebo esta mensagem de erro.
username:~/workspace (master) $ newfolder a
mkdir: missing operand
Try 'mkdir --help' for more information.
bash: cd: newfolder='mkdir: No such file or directory
Responder1
Você precisa de uma função, não de um alias. Tentar:
newfolder() { mkdir -p "$1" && cd "$1"; }
Exemplo:
$ pwd
/tmp
$ newfolder dir1/dir2
$ pwd
/tmp/dir1/dir2
Notas:
A
-p
opçãomkdir
diz para criar diretórios pais ausentes, se necessário. No exemplo acima,dir1
não existia, masmkdir -p dir1/dir2
criou ambosdir1
edir2
.Como usamos o operador shell
&&
, ocd
comando só será executado semkdir
for bem-sucedido.Aliases são úteis em casos muito simples onde uma string fixa pode ser substituída por uma palavra. Aliases não processam argumentos.
Como estamos usando uma função shell no lugar de um alias, podemos referenciar os argumentos, como, neste caso,
$1
de acordo com nossas necessidades.