
Tenho experimentado com pushd
e popd
no 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 por
dirs
, 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 -n
suprime a mudança do diretóriosedeveria ter sido sem -n
.
popd +N
com N
diferente de zero não altera o diretório. Ele apenas remove o elemento da pilha. Então nesta situação -n
não tem que fazer nada porque não tem nenhuma mudança para suprimir.
Pelo contrário, se você usar popd -n
or 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 +0
ou popd
sem-n
seu diretório atual foi alterado para ~/one/two e a pilha dirs agora é:
1 ~/one/two
2 ~/one
3 ~
Portanto, -n
deve suprimir esse comportamento. E assim, se,em vez devocê executa popd -n +0
ou popd -n
ainda 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 -n
deve impedir a mudança do diretório. Portanto, -n
deve evitar a mudança do topo da pilha. Mas se o topo da pilha não for alterado, o sinalizador -n
não terá nada a ver como está.