Faço muito trabalho no Magento, assim como muitas pessoas com quem trabalho, e é irritante ter que digitar:
cd ../../../../../../
Para descobrir apenas alguns diretórios da pasta raiz 'httpdocs', estou tentando criar um script que siga este pseudocódigo:
while lowest level directory != httpdocs
cd ../
end while;
Parece bem simples, estou assumindo que precisaria fazer alguma forma de grep para verificar se a última parte do diretório de trabalho atual é httpdocs, se não continuar subindo de nível até que seja verdade.
Eu estive procurando aprender o bash para isso, embora pareça que já exista algo semelhante por aí, e a sintaxe me deixa sem fim.
fonte
cd -
posterior para voltar para onde estava.Eu tenho uma função chamada
upto
no meu .bashrc que permite que você vá para qualquer diretório no caminho atual pelo nome:Eu também tenho conclusão para esta função, para que ela me dê nomes de diretório válidos e conclusão ao clicar na guia:
Além disso, tenho outra função
jd
que me permite pular para qualquer diretório abaixo do atual:Exemplo:
fonte
upto httpdocs
.jd
não parece funcionar em todos os casos, você se importaria de explicar como funciona?**
). Para habilitar esse recurso no seu shell bash, useshopt -s globstar
.jd
função, consulte gist.github.com/Rob--W/5888648 . Eu só testei com o Bash 4.2.45, então YMMV.A função bash mais simples que você pode colocar na sua
.bashrc
que eu possa pensar (simples porque ela não usa loops ou processos externos) é:Este usa a substituição Padrão expansão de parâmetros para substituir tudo depois
/httpdocs/
em$PWD
com `/ httpdocs'. Parece muito confuso porque temos que escapar das barras no caminho para diferenciá-las das barras na sintaxe de expansão do bash. Além disso, não escape barras invertidas na cadeia de substituição, por isso também parecerá inconsistente.Se não houver
/httpdocs/
no caminho atual, nenhuma substituição será executada e ela será alterada apenas para o diretório atual.Por exemplo, a substituição será substituída
/a/b/c/httpdocs/e/f/g
por/a/b/c/httpdocs
ecd
dentro desse diretório.A função precisa estar no seu ambiente de shell atual (como uma função ou alias), pois um processo filho não pode alterar o diretório atual de seu pai. É por isso que digo para colocá-lo no seu
.bashrc
e não em um shell script.fonte
Você também pode colocar algo assim no seu perfil:
A simples digitação o
cdh
levará aohttpdocs
diretório superior do seu caminho atual.fonte
Não resolve completamente o seu problema, mas economiza
cd ../../../../../../
um pouco. Peguei emprestado isso da postagem do usuário desconhecido aqui .até N
pula N diretórios para cima na árvore de diretórios
Em vez de digitar
você apenas digita
e um
vai te trazer de volta
Coloque a função no seu .bashrc para usá-lo.
fonte