Existe uma maneira de fazer cd de volta várias vezes no bash? [duplicado]

58

Costumo usar cd - para voltar para onde eu estava. Como posso fazer isso várias vezes no bash? Ou zsh ou alguma outra ferramenta suportaria isso?

    
por timpone 25.07.2013 / 21:27

6 respostas

51

No zsh, há uma opção auto_pushd . Essa opção faz com que cd se comporte como pushd . Então você pode usar apenas popd para voltar aos diretórios anteriores.

~ $ setopt auto_pushd
~ $ cd /
/ $ cd /var
/var $ cd /usr
/usr $ dirs
/usr /var / ~
/usr $ popd
/var $ popd
/ $ popd
~ $

No Bash, você pode alias cd to pushd .

alias cd=pushd

A única desvantagem disso é que você perderá três bandeiras de cd . Na entrada de ajuda cd :

-L force symbolic links to be followed
-P use the physical directory structure without following symbolic links
-e if the -P option is supplied, and the current working directory cannot be determined successfully, exit with a non-zero status

Se você tiver que usar o cd embutido real em vez do alias, você pode usar um destes:

  • 'cd' - Citando o comando faz com que o shell não resolva o alias e use o comando cd normal.
  • \cd - barras invertidas entre aspas. Se você citar um caractere de uma palavra, o shell trata toda a palavra como citada.
  • builtin cd - Isso diz diretamente ao shell para usar o builtin em vez do alias.
por 25.07.2013 / 21:42
23

Aqui está uma maneira rápida e suja de marcar diretórios de forma conveniente e voltar para eles:

$ a() { alias $1="cd $PWD"; }

Vá para algum lugar e digite:

$ a 1

Agora você tem um comando chamado 1 , que faz com cd o diretório atual neste momento. Mais tarde basta digitar:

$ 1

E pronto, de volta para esse diretório. Eu acho isso muito útil.

    
por 26.07.2013 / 01:24
18

bash

Encontrei um script que resolveu esse problema para mim. Com isso, você pode digitar cd -- para ver os últimos 10 diretórios que você usou. Será algo parecido com isto:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

Para ir para ~/Music/thirddir , basta digitar cd -2

link

zsh

oh-my-zsh fornece algumas funcionalidades muito legais para isso (pelo menos eu acho que é o meu-zsh que define isso).

Basicamente, d é aliased para dirs -v | head -10

dirs é um comando interno do zsh e mostra os últimos diretórios em que você esteve.

Além disso, 1 é aliased para cd -1 e assim por diante para todos os números para 9 .

Na prática, funciona assim:

$ pwd
/home/me/Documents/gems/java_regex/lib

$ d
0       ~/Documents/gems/java_regex/lib
1       ~/Documents/gems/java_regex
2       ~/Documents/gems
3       ~/Documents
4       ~

$ 2
~/Documents/gems

$ pwd
/home/me/Documents/gems
    
por 26.07.2013 / 00:20
7

Você pode usar o pushd builtin no bash para enviar novos diretórios de trabalho para a pilha de diretórios. Use popd para popar diretórios da pilha para retornar aos diretórios de trabalho anteriores.

    
por 25.07.2013 / 21:38
0

Estou usando uma função simples encontrada em commandlinefu por muito tempo ago

 up() { local x='';for i in $(seq ${1:-1});do x="$x../"; done;cd $x; }

(adicionado no meu osx .profile funciona como um encanto)

    
por 31.07.2013 / 09:50
-1

Sim. Podemos tornar seu comando cd mais poderoso. O perfil Bash nos permite personalizá-lo da maneira que queremos.

Em vez de usar vários cd para navegar pelo diretório, podemos usar o alias

Por exemplo:

alias ..5="cd ../../../../.."

Isso levará você ao diretório 5 acima do nível.

    
por 26.07.2013 / 08:40