Comportamento popd e pushd com opção "-n"

Comportamento popd e pushd com opção "-n"

Tenho experimentado com pushde popdno bash (Cygwin, página de manual diz "GNU bash 4.1") e a página de manual não parece corresponder ao comportamento.

Para pushd, o comando

% pushd +1

ambos giram a pilha e alteram o diretório de trabalho;

% pushd -n +1

apenas gira a pilha. Isso parece corresponder à página de manual.

Mas

% popd +1 

remove uma entrada da pilha, mas NÃO altera o diretório de trabalho (mesmo que "-n" não tenha sido fornecido). Isso não parece corresponder à página de manual citada abaixo:

Os argumentos, se fornecidos, têm os seguintes significados:
    -n   Suprime a mudança normal de diretório ao remover diretórios da pilha, para que apenas a pilha seja manipulada.
    +n   Remove onª entrada contada a partir da esquerda da lista mostrada pordirs, começando com zero. Por exemplo: “ popd +0” remove o primeiro diretório, “ popd +1” o segundo.

É assim que deveria ser?

Responder1

Agora experimento popd/pushd e acho que é assim que deveria ser. A lógica é que -nsuprime a mudança do diretóriosedeveria ter sido sem -n.

popd +Ncom Ndiferente de zero não altera o diretório. Ele apenas remove o elemento da pilha. Então nesta situação -nnão tem que fazer nada porque não tem nenhuma mudança para suprimir.

Pelo contrário, se você usar popd -nor popd -n +0, o segundo elemento superior da pilha será removido, em vez do que está no topo. Porque se você removesse o de cima, seu diretório mudaria. Quero dizer, se você tiver:

 0  ~/one/two/three
 1  ~/one/two
 2  ~/one
 3  ~

quando você faz popd +0ou popdsem-n

seu diretório atual foi alterado para ~/one/two e a pilha dirs agora é:

 1  ~/one/two
 2  ~/one
 3  ~

Portanto, -ndeve suprimir esse comportamento. E assim, se,em vez devocê executa popd -n +0ou popd -nainda está em seu diretório antigo e a pilha dirs agora é:

 0  ~/one/two/three
 1  ~/one
 2  ~

Você pode ver que o segundo elemento superior ~/one/two foi removido, em vez do primeiro elemento (para que você pudesse permanecer no diretório antigo).

Então, o que tento destacar aqui é que o topo da pilha de diretórios é sempre o diretório atual. E -ndeve impedir a mudança do diretório. Portanto, -ndeve evitar a mudança do topo da pilha. Mas se o topo da pilha não for alterado, o sinalizador -nnão terá nada a ver como está.

informação relacionada