Entenda para que serve pushd, popd e dirs
Neste artigo vamos te ajudar a entender para que serve e como utilizar na prática os comandos pushd
, popd
e dirs
.
Se você utiliza Linux ou Mac em algum momento precisou navegar entre os diretórios via terminal. O comando cd
funciona perfeitamente para esta tarefa, ainda mais quando usado com argumentos que facilitam a navegação como cd ..
, cd -
, cd ~
, etc.
Embora este comando atenda a necessidade dos usuários, quando utilizado em um script pode causar confusão. Imagine que seu script precisa navegar em diversos diretórios, executar comandos e retornar aos diretórios anteriores. É possível usar o cd
para isso? Sim. É a melhor alternativa? Vamos descobrir.
Teoria
Começando com a teoria, pushd
, popd
e dirs
servem para manipular pilha de diretórios, mas relaxa, mais pra frente vai ficar mais claro.
- pushd: Adiciona diretórios na pilha
- popd: Remove diretórios da pilha
- dirs: Lista diretórios da pilha
O pushd
substitui o comando cd
, deste modo, para trocar de diretório usa-se pushd <diretorio>
e cada vez que este comando for executado o diretório será adicionado na pilha.
Por outro lado, o popd
serve para fazer o oposto, ou seja, ele remove da pilha e acessa o diretório.
O dirs
serve para mostrar quais diretórios estão na pilha.
Prática
Para começar abra o terminal e vá para /tmp
, então crie 4 diretórios: dir-a, dir-a/dir-a1, dir-b, dir-b1
mkdir dir-a dir-a/dir-a1 dir-b dir-b/dir-b1
Agora vamos ao que interessa.
- Navegue pelos diretórios usando
pushd
:
pushd dir-a
pushd ../dir-b/dir-b1
pushd ../../dir-a/dir-a1
pushd ../../dir-b
- Note que a cada comando
pushd
é exibido a pilha de diretórios atual e a pilha segue exatamente a mesma sequencia de navegação
- Liste a pilha de diretórios usando o comando
dirs
:
dirs
Ou seja, seguimos esta navegação, do último ao primeiro:
/tmp/dir-b <= Estamos aqui (último diretório acessado)
/tmp/dir-a/dir-a1
/tmp/dir-b/dir-b1
/tmp/dir-a
/tmp <= Diretórios inicial
- Agora vamos retornar nos diretórios navegados usando o
popd
:
popd
O último diretório foi removido da pilha e voltamos para o anterior:
/tmp/dir-a/dir-a1 <= Estamos aqui
/tmp/dir-b/dir-b1
/tmp/dir-a
/tmp <= Diretórios inicial
- A cada comando
popd
executado, um item é removido da fila e o diretório anterior é acessado. Faça isso até chegar em /tmp.
- Ao listar a pilha de diretórios verá que possui somente o diretório atual:
E se tentar executar o popd
receberá mensagem informando que a pilhar de diretórios está vazia:
Utilizar o pushd
e popd
na linha de comando não é tão comum, entretanto utiliza-los em scripts é uma boa prática para evitar erros durante a execução. Quer saber mais? Confira nesta documentação.