Posso usar o cd ../ .. como um nome de alias?

10

Estou usando o Windows e o Ubuntu em paralelo e faço o console em ambos.

No Windows, posso fazer uma

C:\Users\Thomas>cd..\..
C:\>

No entanto, no Linux isso não funciona, nem com barras invertidas nem com barras.

21:17:10 $ cd../..
bash: cd../..: No such file or directory

Como muitas vezes cometi esse erro, tentei definir um alias em .bash_aliases para essa situação:

alias cd../..='cd ../..'
alias cd..\..='cd ../..'

Quando começo uma nova festa, recebo

21:16:26 $ bash
bash: alias: 'cd../..': invalid alias name

Como eu configuraria aliases para cd..\.. e cd../.. corretamente?

O cd..\.. parece ter problemas com o caractere de escape:

21:39:43 $ cd..\..
bash: cd....: command not found

Ele não funciona, mesmo se eu definir outro alias para cd.... .

    
por Thomas Weller 27.09.2014 / 23:30

4 respostas

9

/ e \ estão entre os caracteres que não podem aparecer em um nome alternativo de Bash. De man bash :

  

Os caracteres / , $ , 'e = e qualquer um dos metacaracteres do shell ou caracteres de citação listados acima podem não aparecer em um nome de alias.

Como solução alternativa, você pode alternar para o Zsh, o que permite que os dois:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/
    
por fkraiem 27.09.2014 / 23:58
12

Você não pode usar barras em um nome de alias. O Bash os permite em nomes de função, no entanto, você pode fazer disso uma função:

cd../.. () { cd ../..; }

Você não pode usar barras invertidas em um alias ou nome de função. O caractere de barra invertida cita o caractere seguinte, portanto, cd..\.. é analisado como cd.... , bem antes de a sequência ser consultada como um nome de comando. Se você quiser chamar um comando chamado cd..\.. , será necessário digitar cd..\.. , 'cd..\..' ou algo equivalente. Além disso, um nome de comando que foi citado de alguma forma não é considerado para pesquisa de alias, então você nunca pode usar um nome de alias contendo uma barra invertida. O Bash não permite barras invertidas nos nomes das funções. Como cd..\.. é analisado como cd.... , você pode definir uma função chamada cd.... (como acima).

Se você usar o comando cd , você terá que digitar o espaço depois dele, assim como qualquer outro comando. Mas você pode salvar digitando não digitando cd . Defina a opção autocd com a seguinte linha em ~/.bashrc :

shopt -s autocd

Então você pode digitar um nome de diretório na linha de comando, e “executar” aquele diretório irá mudar para ele.

~/some/sub/directory$ ../..
~/some$ 
    
por Gilles 27.09.2014 / 23:53
4

"Você não pode usar barras em um alias ou nome da função "? Isso é novidade para mim. Eu tenho usado a seguinte função de shell por anos em Linux e OS X bash, e nunca tive nenhum problema:

function ../.. { cd ../..; echo "$PWD"; }

Naturalmente, cd../.. também é um bom nome de função. Uma barra pode ser usada em um nome de função do shell.

Quanto à versão de barra invertida, você não pode incorporá-la em um alias ou nome de função, mas não precisa: Quando você digita cd..\.. , o bash interpreta a barra invertida como um escape e tenta executar o% resultante código%. Então defina isso e você pode fazer tudo o que você queria. Você é bem vindo.

function cd.... { cd ../..; } 
    
por alexis 28.09.2014 / 01:12
2

Se você quiser manter os aliases, por que não fazer isso:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

Ou, se você precisar ir caminho de volta:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

Não faz ideia de como isso ajuda você a se manter mentalmente sincronizado com o cérebro do Windows, mas isso ainda parece ser um caminho simples. (Pelo menos para aqueles de nós com sorte suficiente para não precisar se preocupar sobre como as coisas são feitas no Windows.)

    
por jon 28.09.2014 / 07:02

Tags