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.

linux  bash 

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

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 )

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.")


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'

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.