removendo ou limpando a pilha de caminhos popd / pushd

39

Depois de pushdmuitas vezes, quero limpar toda a pilha de caminhos.

Como eu iria popdtodos os itens da pilha?

Gostaria popdsem precisar saber quantos estão na pilha?

O manual do bash não parece cobrir isso .

Por que eu preciso saber disso? Sou exigente e limpo a pilha.

chrisjlee
fonte
11
BTW, o manual completo do bash está no gnu.org. Se você usar a versão tudo em uma página, pode ser mais fácil encontrar coisas lá.
Jw013
Ah, gostaria que o Google indexasse esse. Obrigado @ jw013
chrisjlee

Respostas:

47

dirs -c é o que você está procurando.

jw013
fonte
11
isso faz esvaziar a pilha, mas que não restaurar o diretório de trabalho a partir do fundo da pilha
Eliran Malka
8

Para esvaziar a pilha e restaurar o diretório de trabalho da parte inferior da pilha:

  • recupere esse diretório dirs, mude para esse diretório e limpe a pilha:

    cd "$(dirs -l -0)" && dirs -c

    A -lopção aqui listará os caminhos completos, para garantir que não falharemos se tentarmos cdentrar ~e -0recuperar a primeira entrada da parte inferior da pilha.

    @ jw013 sugeriu tornar esse comando mais robusto, evitando expansões de caminho:

    pushd -0 && dirs -c
  • ou, popdaté encontrar um erro (que é o status de uma popdchamada quando a pilha de diretórios estiver vazia):

    while (( $? == 0 )); do popd; done
Eliran Malka
fonte
11
O primeiro método é exatamente o que eu queria. O segundo não funcionaria no meu caso, já que eu havia ligado pushdalgumas vezes, depois removi um dos diretórios no meio e popdfalhou quando tentei desenrolar. Eu precisava pular todas as coisas ruins no meio para voltar para onde eu comecei.
Chuck Wilbur
direito @ChuckWilbur - se você mexidos a pilha dir, popdnão vai te salvar :)
Eliran Malka
É melhor em pushd -0vez de cd "$(dirs ...)".
jw013
@ jw013 como assim? essa confusão faria com a pilha dir ainda mais (o que nós estamos tentando limpar aqui ..)
Eliran Malka
11
cd "$(...)"funciona em 90%, provavelmente até 99% dos casos de uso, mas pushd -0você pode dizer com confiança 100%. Existem tantas dicas e casos de potencial associados à expansão de caminhos de arquivos / diretórios no shell que a coisa mais robusta a ser feita é evitá-la completamente, o que pushd -0é muito conciso. Não há chance de ser pego por um bug com um caso estranho, se você nunca correr o risco. Se você quiser ler mais sobre as possíveis dores de cabeça envolvidas nos nomes de arquivos / caminhos do Unix, um bom ponto de partida é mywiki.wooledge.org/ParsingLs
jw013