$ pwd
/tmp/d1
$ dirs
/tmp/d1
$ pushd ../d2
/tmp/d2 /tmp/d1
$ popd
/tmp/d1
$ pwd
/tmp/d1
Parece que pushd
sempre coloca o diretório atual, por exemplo, /tmp/d1
na pilha, embora eu o execute como pushd ../d2
?
Observe que:http://linux.101hacks.com/cd-command/dirs-pushd-popd/
O primeiro diretório da saída do comando dir é sempre o diretório atual e não o conteúdo da pilha.
Responder1
Não pushd
nem sempre envia o diretório atual. Da página bash
' man
:
pushd [-n] [+n] [-n]
pushd [-n] [dir]
Adds a directory to the top of the directory stack, or rotates
the stack, making the new top of the stack the current working
directory. With no arguments, exchanges the top two directo‐
ries and returns 0, unless the directory stack is empty.
.
.
dir Adds dir to the directory stack at the top, making it
the new current working directory.
O formulário com um diretório pushd [dir]
não está usando o diretório atual, a menos que esse diretório seja explicitamente usado como argumento. Fazendopushd somedir
Responder2
Estou usando zsh
e tem uma opção PUSHD_IGNORE_DUPS
: "Não envie várias cópias do mesmo diretório para a pilha de diretórios". Talvez seja necessário verificar as opções do shell (pois zsh
eu precisava unsetopt pushdignoredups
).