pushd
, popd
E dirs
são builtins shell que permitem manipular a pilha de diretórios . Isso pode ser usado para alterar diretórios, mas retorne ao diretório de onde você veio.
Por exemplo
inicie com os seguintes diretórios:
$ ls
dir1 dir2 dir3
pushd para dir1
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
O comando confirma que temos 2 diretórios na pilha agora. dir1
e o diretório original somedir
,.
pressione push para ../dir3 (porque estamos dentro dir1
agora)
$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3
dirs
mostra que temos 3 diretórios na pilha agora. dir3
,, dir1
e somedir
. Observe a direção. Cada novo diretório está sendo adicionado à esquerda. Quando começamos a exibir os diretórios, eles também vêm da esquerda.
altere manualmente os diretórios para ../dir2
$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir
Agora comece a aparecer diretórios
$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1
Observe que voltamos para dir1
.
Pop novamente ...
$ popd
~/somedir
$ pwd
/home/saml/somedir
E estamos de volta onde começamos somedir
.
Pode ficar um pouco confuso, mas o cabeçalho da pilha é o diretório em que você está atualmente. Por isso, quando voltamos somedir
, mesmo que dirs
mostre isso:
$ dirs
~/somedir
Nossa pilha está vazia.
$ popd
bash: popd: directory stack empty
cd -
, aliases para encurtamentocd ..
etc.).pushd
&popd
em scripts porque eles me impedem de lembrar de onde eu vim, sempre possopopd
voltar de onde vim. Eu costumo fazerpopd >/dev/null 2>&1
para silenciá-lo. Eu uso cd todos os dias no meu shell. Também existem outras dicas para economizar tempo neste artigo: thegeekstuff.com/2008/10/… .cd -
apenas rastreia o último diretório, imagino que seria possível ter problemas se você chamar uma função que também altera o diretório internamente. nesse caso, a função acabaria sendo redefinida - para o diretório atual, não o diretório para o qual você deseja retornar. pushd / popd é o método mais seguro. Nota: eu não testei minha teoria.~/somedir/dir3
depois do primeiropopd
?Existe um caso de uso
pushd
epopd
comandos realmente úteis para trabalhar com várias pastas simultaneamente.Você pode navegar na pilha com muita facilidade, pois ela é enumerada. Ou seja, você pode ter várias pastas de trabalho à sua disposição durante o trabalho.
Veja um exemplo simples abaixo.
Primeiro, vamos criar uma estrutura de pastas de exemplo.
Em seguida, você pode adicionar todas as suas pastas à pilha:
Você pode procurar por:
Para navegar com segurança, é necessário adicionar a última pasta (zero) duas vezes, pois ela será sempre reescrita:
Agora, você pode percorrer essas pastas e trabalhar com a pilha, como também com aliases para as pastas. Eu acho que a seguinte parte é auto-explicativa:
Dica adicional é criar um alias para
dirs -v
.Por exemplo:
fonte
dirs -c
Um caso de uso simples para usar a pilha de diretórios que você não pode fazer apenas com o cd é:
pushd .
adiciona o diretório atual XX àdirs
pilha. Depois, você pode se movimentar usandocd
e, para retornar ao XX, basta fazê-lo,popd
independentemente de quão "distante" você está na árvore de diretórios (pode saltar sobre vários níveis, de lado, etc.). Especialmente útil em scripts bash.fonte
pushd
/popd
trabalha independentementecd
, você pode usá-los como um marcador mais estável quecd -
.pushd
epopd
permite que você manipule os diretórios na pilha.Quando você é
pushd
um diretório, coloca o diretório atual na pilha e altera o diretório para o especificado como parâmetro.popd
permitirá que você volte para o diretório na pilha.Se você repetir, o percurso do diretório será preservado e você poderá voltar para os diretórios salvos na ordem inversa do que os salvou.
fonte
para o bash , basicamente: em vez de usar o cd, é possível
pushd
alterar os diretórios, com o uso prático: o histórico dos diretórios visitados é salvo (corretamente: empilhado) e é possível alternar entre elesPara ver o uso da pilha
dirs
e para facilitar a navegação (para obter os números das "entradas da pilha", use:Resultado:
Agora utilize esses números com
cd
e~
como:Mas esses números são reorganizados agora e a posição "0" será alterada; portanto, apenas
pushd
o diretório para a posição superior duas vezes (ou use um manequim na posição 0) como:agora 1..3 vai manter a posição
(para liberar o diretório atual da pilha / excluí-lo do uso do histórico
popd
)fonte
Um uso prático que encontrei é alternar entre diretórios usando pushd e popd.
Suponha que tenhamos dois diretórios dir1 e dir2 e preciso alternar entre eles continuamente por algum motivo xyz.
Atualmente estou em somedir que tem dois diretórios
dir1
edir2
:Agora eu mudo para
dir1
Agora vou adicionar
dir1
à pilha e mudar paradir2
Como você pode ver, agora tenho
dir2
edir1
estou na pilha e atualmente estou nodir2
.Agora, para voltar
dir1
, eu correreipushd || popd
.Voila, eu estou no dir1 e tenho dir1 e dir2 na pilha. Para voltar ao dir2 novamente, execute
pushd || popd
Essa é uma maneira simples de alternar entre diretórios. Agora, você pode saber o que saber, por que preciso alternar entre diretórios? Bem, um caso de uso é que, quando trabalho no aplicativo da web, tenho meu arquivo make em um diretório e meus arquivos de log em outro diretório. Freqüentemente, ao depurar o aplicativo, preciso alternar entre o diretório de log, verificar os logs mais recentes e voltar ao diretório make, fazer algumas alterações e criar o aplicativo.
fonte
pushd
epopd
maiscd -
?" Você claramente não respondeu a essa pergunta, pois está descrevendo exatamente o quecd -
faz. (2) Qual é o sentido de dizerpushd || popd
? Sim, eu sei que issocmdA || cmdB
significa executarcmdA
e, se falhar, executecmdB
. Estou perguntando o que de bom faz nesse contexto.pushd
sem argumentos significa "trocar os dois principais elementos na pilha de diretórios"; falhará se o diretório atual for o único elemento na pilha de diretórios. Nesse caso,popd
falhará também.pushd
epopd
.pushd || popd
para alternar entre diretórios:pushd
sem argumentos, é exatamente isso.cd -
existe explicitamente apenas para retornar ao último diretório. Além disso, a pergunta pedia a vantagem dopushd
excessocd -
, enquanto essa resposta claramente fornece apenas uma desvantagem: mais digitação.|| popd
da alternância? Por favor explique. (Não é apenas PUSHD suficiente?)cd -
para alternar entre dois diretórios. Além disso,cd
sem argumentos, retorna ao seu diretório inicial.Simplificando - quando você precisar navegar entre mais de 2 diretórios, geralmente várias vezes para frente e para trás, uma vez
cd -
que não o cortará com nada além de duas pastas.Então, por exemplo, em vez de tentar voltar a percorrer os longos caminhos anteriores, olhando para o histórico do buffer ou preenchendo um caminho longo, basta empilhar os mais importantes e, se necessário, você os move convenientemente somente pelo número deles. A rotação entre estruturas complexas de diretórios e caminhos longos torna-se ágil e rápida.
Os recursos internos também permitem reordenar a pilha ou exibir os diretórios desnecessários, permitindo flexibilidade no seu fluxo de trabalho.
O empilhamento de diretórios também pode ser usado em scripts da mesma forma para operações que abrangem vários diretórios.
fonte
Achei o uso de dirs / popd / pushd um pouco desconfortável. Eu vim com minha solução pessoal no tcsh, adicionando o seguinte código em .alias
dessa maneira, alias, por exemplo, "p". para salvar o diretório de trabalho atual no arquivo ~ / .mydir. e "cd". recuperar esse diretório quando e onde eu quiser. "del" remove o arquivo correspondente; "casa." define o diretório como o diretório inicial (equivalente a cd; p.); "cdl" lista quais são os diretórios salvos. Observe que se você usar ~ / Dropbox / .mydir $ b (ou qualquer outro serviço em nuvem como, por exemplo, ownCloud) em vez de ~ / .mydir $ b, terá uma maneira inteligente de usar seus diretórios preferidos em diferentes contas e máquinas.
fonte
isso me ajuda a pular entre os diretórios dos mais recentes usados no meu terminal. :-) Espero que ajude você a usar pushd e popd eu uso cd ~ stackednumber
fonte
Usando
cd
ecd -
permite alternar entre apenas os dois diretórios usados mais recentemente. O tamanho do seu "conjunto de trabalho de diretório" é dois.Usando
pushd
, você pode manter um número arbitrariamente grande de diretórios em seu conjunto de trabalho.Eu uso a
pushd
maior parte do tempo e nãocd
. Depois de criar uma pilha de diretórios ativospushd directory_name
, você poderá alternar entre eles o dia inteiropushd ~#
.Uso
popd
raramente, somente quando quero remover um diretório da pilha quando sei que terminei de usá-lo.Vá para o diretório e remova-o da pilha:
Permaneça no diretório atual e remova outro diretório da pilha:
Você acaba com um estilo de trabalho semelhante a ter várias janelas ou guias do terminal abertas (uma para cada diretório em que você está trabalhando ativamente), mas todas em um terminal. Isso economiza espaço na tela, além disso, como os caminhos de diretório estão todos disponíveis em um shell, você pode fazer coisas como:
Exemplos:
Em
tcsh
(mas nãobash
), você pode salvar sua pilha de diretórios em um arquivo e restaurá-la mais tarde.Salve :
Restaurar:
Caso contrário, basta substituir
~
nosbash
exemplos por=
para uso emtcsh
.fonte
O pushd / popd é um conceito tão simples que demorei um pouco para compreender, pois as pessoas tendem a ensiná-lo definindo esses comandos como comandos que 'manipulam a pilha de diretórios' que, na minha opinião, é confusa.
Eu olho para isso de uma maneira diferente:
pushd [nome_da_pasta] - fará o cd para [nome_da_pasta] e documentará o destino que é [nome_da_pasta] em uma pilha de diretórios, enquanto o diretório superior da pilha será sempre o diretório atual em que você está
popd - primeiro coloca você no registro do diretório que está no topo da pilha e depois o remove da pilha
dirs - Imprime a pilha de diretórios (pode ser tratada como o dir Db, onde a entrada mais à esquerda é o diretório atual (parte superior da pilha)
Portanto, os 2 casos de uso mais populares são:
Caso de uso 1: Navegando usando pushd e popd
Digamos que fiz o acima, pois gostaria de voltar para as pastas que documentei!
Observe que, se eu fizer um cd manualmente, afetarei a entrada da pilha de diretórios superior (que é sempre o diretório atual)
Vamos navegar para trás agora:
Mais uma vez, posso documentar qualquer diretório que eu quero e, em seguida, navegar manualmente para outro diretório, então poderei retornar facilmente ao diretório documentado que inseri na pilha.
Caso de uso 2: Navegando usando o índice de pilha numérica
Vamos dizer que eu enviei usando pushd dir4 dir3 dir2 dir1, agora executando dir -v mostrará:
Agora você pode executar qualquer operação do Linux que envolva diretórios usando o índice da pilha:
Você pode até excluir uma entrada específica da pilha de diretórios:
Espero que o uso das palavras "documentando" ou pense na pilha de diretórios como algum tipo de Db simplifique o conceito!
fonte