diretório atual push / pop?

66

Com o bash, existe uma maneira de enviar e exibir o diretório de trabalho atual? Eu tentei escrever, bash;cd dir; ./dostuff;exit;mas o diretório atual é agora dir.


fonte

Respostas:

91

Existe pushdepopd

O Bash manterá um histórico dos diretórios que você visita, basta perguntar. O Bash armazena o histórico em uma pilha e usa os comandos pushd e popd para gerenciar a pilha.

Mais para ler

Exemplo:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Nifle
fonte
11
Trecho do linkpushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
Master Chief
31

A chamada bashinicia um novo subshell, que possui sua própria entrada; nenhum dos outros comandos será executado até que saia. Ao redor dos comandos a serem executados com parens também será iniciado um novo subshell, mas os comandos serão executados dentro dele.

( cd dir ; ./dostuff )
Ignacio Vazquez-Abrams
fonte
11
Brilhante! Não é necessário pressionar / pop quando a intenção é apenas executar um comando em um diretório diferente (por exemplo, atualizar uma dependência) e voltar ao atual.
Dan Dascalescu 16/01
12

Se você não precisar de vários níveis de histórico de diretório, também poderá:

cd foo
# do your stuff in foo
cd -

Comparado a pushd/ popd, isso tem a desvantagem de que, se cd foofalhar, você acaba no diretório errado cd -.

(Provavelmente cd -é mais útil scripts externos. "Vamos voltar onde eu estava.")

tuomassalo
fonte
4

Eu uso o alias para acompanhar as alterações no meu diretório, para 'cd' em algum lugar, basta voltar para onde estava usando 'cd.' Ou voltar dois usando 'cd ..', etc .;

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'
cdp
fonte
11
Você pode explicar com mais detalhes o que esse código faz?
bwDraco
Isso é esperto. Eu tenho pseudônimos em torno do meu pushd e popd para fazer algumas coisas que eu gosto. Eu uso a pilha de diretórios o tempo todo. Eu odeio assistir as pessoas cd em algum lugar e depois rolar para trás procurando o diretório anterior para cortar e colar. Como não posso fazer a maior parte do meu trabalho no diretório inicial por causa de cotas, preciso usar o armazenamento em pool na rede.
Michael Mathews
11
O alias é ..cdrobusto o suficiente? parece que ele remove apenas os últimos 10 itens da pilha.
Reynoldsnlp