Usando popd sem remover o último valor

8

Como posso obter o comportamento de usar popdsem realmente remover o último diretório da pilha? Em outras palavras, desejo navegar de volta para o último diretório que defini pushd, mas quero que ele permaneça no topo da pilha para que o próximo popdme leve ao mesmo diretório (que ainda estaria no topo do diretório). pilha) novamente.

Freedom_Ben
fonte
O "cd -" não funciona? Se bem entendi, a sequência é: "pushd d1; pushd d2; pushd d3;" e agora para voltar ao d2, certo?
tpb261
cd -funciona, mas somente se você não estiver em cdnenhum outro lugar até estar pronto popd. Eu costumo pular a alguns lugares antes que eu estou pronto para voltar
Freedom_Ben
Isso é óbvio ... mas, de alguma forma, eu perdi a parte implícita do "salto" da sua pergunta.
precisa saber é o seguinte

Respostas:

2

E se: cd "$(dirs -l -p | sed -n '2{p;q}')"

Glenn Jackman
fonte
Perfeito, obrigado! Isso é algo que eu já vi. Eu aliastei esse comando para peekd(tipo de C ++ STL-ish e fácil de lembrar), para que eu possa digitar apenas peekdpara obter o comportamento. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben
3
@Freedom_Ben Isso pode ser simplificado paracd "$(dirs +1)"
Gilles 'SO- stop
@ Gilles Quando tento fazer isso, ele diz "bash: cd <meu diretório>: esse arquivo ou diretório não existe", mesmo que ele exista claramente. Sabe por que isso acontece? O cd não está interpretando <meu diretório> corretamente como um caminho? Na mensagem de erro, parece que deve funcionar. ou seja, <meu diretório> parece correto e se eu simplesmente digitar "cd <meu diretório>", ele funcionará.
Nukeguy
1
@nukeguy <my directory>Começa com um til? Meu comentário acima estava faltando a -lopção de listar o diretório completo em vez de usar a ~abreviação. Deveria sercd "(dirs -l +1)"
Gilles 'SO- stop
@Gilles Yes! Era exatamente isso que eu procurava, obrigado! Talvez você deva postar seu comentário como uma solução separada - na minha opinião, é a opção mais geral e útil nesse tópico.
Nukeguy
10

O pushd sem argumentos troca as duas principais entradas da pilha, permitindo que você efetivamente entre e entre em um CD.

Começando em d1, execute pushd d2 adiciona d1 e d2 à pilha e deixa você em d2. Execute pushd novamente sem argumentos, e você estará de volta em d1 com d1 e d2 invertidos na pilha.

Stephen Davison
fonte
6

Se eu entendi corretamente, você poderia pushd .logo depois, popdpara que o popdiretório ed seja colocado novamente no topo da pilha.

Eric Carvalho
fonte
Uau, essa é uma solução muito fácil e elegante. Obrigado!
Freedom_Ben