Às vezes, quando quero mudar para o diretório pai, digito por engano em cd ,,
vez de cd ..
. Existe uma maneira de fazer com que o bash considere essas instruções iguais? Eu nunca uso vírgulas em meus comandos. Idealmente, gostaria de alias ,,
para ..
. Quando tentei isso, não funcionou. Por que isso não funcionou? De que outra forma posso abordar esse problema?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
$ ,,
iria reclamar, tais como:bash: ..: Is a directory
. (Em outras palavras, não é um executável.)alias 'cd ,,'='cd ..'
. Bem, você poderia, mas você tem que executá-lo comocd\ ,,
para torná-lo uma palavra só.)alias -g ,,=..
ecd ,,
funciona como você espera.find / -type d -exec ln -s .. {}/,, \;
... ;-)Respostas:
ZSH:
Se você
zsh
alias -g ,,=".."
está usando é o que você precisa, mas isso fará com que ",," seja expandido em todos os lugares, não apenas quando usadocd
.De
man zshbuiltins
:BATER:
Se restrito a
bash
(como a pergunta está marcada com bash ), leia o seguinte:Esta é uma solução de alias puro, conforme solicitado, no entanto , isso fará mais do que o necessário, possivelmente frustrando o usuário (consulte o aviso no final da minha postagem).
Citação
man bash
:Portanto, basta alias
cd
com um espaço extra (para permitir a expansão de seu próximo argumento) e, em seguida, alias,,
para..
. Veja issodá exatamente o que você precisa.
Observe que isso está correto não apenas para
bash
(e suaalias
implementação), mas para todos os shells compiladores POSIX. Citando um exemplo deman 1p alias
(o manual não descreve esse recurso explicitamente, apenas através de um exemplo):Aviso: como o @PeterCordes escreve em seu comentário, ele automaticamente fará com que outros aliases se expandam quando escritos depois
cd
. Pode ser necessário que você escrevacd \grep
se deseja alterar o diretório para um nomeado,grep
mas seugrep
é um alias paragrep --color=auto
. Sem a barra invertida,cd
será relatado o erro "muitos argumentos" (você não pode acessarcd
dois diretórios ao mesmo tempo) !.fonte
cd
entrar em um diretório com seu código-fonte. Ou outras colisões entre seus aliases e nomes de diretório comuns. Likecd dr
se expandiriacd disown -r
para mim, com esse apelido. Enfim, é muito melhor substituir o builtincd
por uma função para coisas como essa, IMO.Os aliases não devem fazer isso, mas você pode criar uma função chamada
cd
que é um wrapper para o realcd
. Este funciona para mim! Basta colocá-lo em seu.bash_profile
arquivo de perfil ou de sua escolha.Ou, com comentários e formatação bonita:
EDITAR
Obrigado @derobert por apontar que
if then else
é melhor aqui do que&& ||
. Além disso, acabei de perceber ( * facepalm *) que essa implementação só funcionará se algum argumento que não seja o caminho (ie-L -P
) não for o primeiro argumento. Portanto, esteja avisado, se você tiver um mau hábito de digitar,cd -L ,,
isso não ajudará. E isso não é trivial para lidar corretamente, eu acho.fonte
$1
antes de executar o built-in:cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
set .. "${@:2}"
, ou você perde alguma coisa após o primeiro argumento...
não precisa ser o primeiro argumento;cd
nobash
pode tomar uma variedade de opções (-P
,-L
,-@
,-e
).Aliases deve ser a primeira palavra de um comando. Além disso, o alias deve ser substituído por uma palavra, portanto, não há espaços).
Você poderia usar o pseudônimo de ambos
..
e,,
sercd ..
.fonte
cd ..
..
no Bash é com oshopt -s autocd
que permite alterar para qualquer diretório, basta digitar seu nome. Claro que você ainda os alias para,,
Outra maneira de
..
alterar o diretório é ativar oautocd
recurso do Bash :Isso mudará automaticamente o diretório quando você digitar o nome de um:
Você ainda precisa criar um alias para,
,,
mas isso pode ser feito apenasalias ,,=..
fonte
Já existe
um aplicativo paraum script: https://github.com/shyiko/commacd (sem afiliação a Stanley Shuyiko).Para responder à sua pergunta, o script aliases vírgulas para três funções que ele define:
fonte