Muitos utilizadores do Linux talvez não tenham familiaridade com os comandos pushd
e popd
, embora sejam funcionalidades já existentes há bastante tempo. Esses comandos podem otimizar significativamente a navegação entre diretórios na linha de comando. Este artigo explorará como utilizá-los de forma eficaz.
O que são pushd
e popd
?
Uma das inovações que Bill Joy introduziu no seu C Shell de 1978 foi o conceito de uma pilha de diretórios e os comandos pushd
e popd
para manipulá-la. Como a imitação é a forma mais genuína de elogio, a ideia da pilha de diretórios, juntamente com os comandos pushd
e popd
, foi rapidamente adotada em outros shells (como o Bash) e até mesmo em outros sistemas operacionais.
O conceito de pilha é bastante simples: os itens são adicionados um a um, sendo que o item mais recente se encontra sempre no topo. Quando os itens são retirados da pilha, eles são removidos de cima para baixo, seguindo a ordem de entrada. Pilhas com esta característica são comumente referidas como filas LIFO (Last-In, First-Out).
Na prática, pushd
e popd
oferecem um pouco mais de flexibilidade, mas este modelo simples serve como uma boa base para compreensão inicial.
Como estamos a falar de uma pilha de diretórios, não é surpresa que o “d” em pushd
e popd
represente “diretório”. Estes comandos permitem que se adicione diretórios à pilha ou que se remova os mesmos da pilha.
Mas como é que isso nos beneficia?
Como o pushd
Preenche a Pilha
Ao usar o comando pushd
, três ações ocorrem simultaneamente:
- O diretório é alterado, de forma semelhante ao comando
cd
. - O nome e o caminho do diretório são adicionados à pilha.
- A pilha é exibida como uma lista de diretórios separados por espaços.
Nos exemplos que se seguem, note como a pilha de diretórios se expande a cada novo comando pushd
. É importante observar que o topo da pilha está à esquerda, local onde as novas entradas surgem.
Após o primeiro comando pushd
, a pilha contém duas entradas: o diretório de onde se partiu e o diretório para onde se mudou.
Para ilustrar, vamos executar os seguintes comandos:
pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~
O último comando pushd
retornou ao diretório inicial, o que significa que a primeira e a última entrada na pilha são o caractere til (~), representando o diretório inicial. Este exemplo mostra que, mesmo que um diretório já esteja presente na pilha, ele será adicionado novamente com outros comandos pushd
.
É importante notar que a entrada mais à esquerda da pilha, que é a entrada adicionada mais recentemente, corresponde ao diretório atual.
O Comando dirs
Pode usar o comando dirs
, conforme demonstrado abaixo, para visualizar a pilha de diretórios:
dirs
Este comando apenas exibe a pilha, sem afetar a sua estrutura. Algumas das opções disponíveis com o comando pushd
referem-se à posição dos diretórios na pilha.
Se desejar visualizar a posição numérica de cada diretório, pode utilizar a opção -v
(vertical), conforme demonstrado:
dirs -v
Se preferir ver o caminho completo do diretório inicial em vez do til (~), utilize a opção -l
(formato longo), da seguinte forma:
dirs -v -l
Adicionando um Diretório à Pilha
Como já vimos, quando se utiliza o comando pushd
, três ações ocorrem: o diretório é alterado, o novo diretório é adicionado à pilha e a pilha é exibida. É possível utilizar a opção -n
(sem rotação) para adicionar um diretório à pilha sem alterar o diretório atual.
A nossa pilha de diretórios é:
dirs -v -l
Agora vamos utilizar o comando pushd
com a opção -n
e especificar o diretório /home/dave
como parâmetro. Em seguida, vamos verificar a pilha de diretórios novamente.
Executamos os seguintes comandos:
pushd -n /home/dave
dirs -v -l
O diretório /home/dave
foi adicionado à pilha na posição 1, que corresponde ao segundo lugar na pilha. Ele não pode ocupar o topo, uma vez que a posição zero é sempre reservada para o diretório atual.
Não saímos do diretório atual, ~/Videos
, por isso não houve rotação para outra posição na pilha.
Mudança de Diretório através da Rotação da Pilha
É possível usar parâmetros numéricos com o comando pushd
para se deslocar para qualquer diretório na pilha. Quando o faz, a pilha é rotacionada, tornando o diretório selecionado a primeira entrada na pilha.
Os diretórios na pilha são identificados pela sua posição numérica. A contagem pode ser feita a partir do início ou do fim da pilha. Números positivos, como +3
, indicam a contagem a partir do início, enquanto números negativos, como -2
, indicam a contagem a partir da parte inferior.
O diretório /home/dave/Documents
encontra-se na posição três. O seguinte comando pode ser utilizado para aceder a este diretório:
pushd +3
Os diretórios da pilha que se encontravam acima do diretório selecionado são movidos para o final da pilha. O diretório escolhido passa a ocupar o topo e o utilizador é direcionado para esse diretório.
Para mudar para o diretório que se encontra na parte inferior da pilha, podemos usar o seguinte comando:
pushd -0
O último diretório é movido para a primeira posição e todos os outros são movidos para baixo na pilha. O utilizador é então direcionado para o diretório ~/Pictures
.
O Comando popd
Pode usar o comando popd
para remover diretórios da pilha.
Ao analisar a pilha de diretórios, pode-se ver que o diretório na posição 1 é /home/dave
. Para removê-lo da pilha, basta executar o seguinte comando, passando o número para o popd
:
dirs -v -l
popd +1
O diretório /home/dave
foi removido e os que estavam abaixo dele na pilha avançaram uma posição.
De forma semelhante ao pushd
, também é possível contar a partir do final da pilha com o popd
. Para remover o último diretório da pilha, o comando a ser executado é:
popd -0
O diretório ~/Music
é removido da última posição na pilha.
Para mudar de diretório, realizar uma ação e retornar ao diretório anterior, é possível combinar os comandos pushd
e popd
.
Vamos utilizar o pushd
para mudar para outro diretório e em seguida o popd
para remover o diretório superior da pilha, voltando ao diretório que se encontrava na segunda posição. Este será o diretório de onde o utilizador partiu inicialmente.
Executamos os seguintes comandos:
pushd ~
popd
O utilizador iniciou no diretório ~/Projects
, foi direcionado para o diretório inicial e regressou novamente ao diretório ~/Projects
.
Navegação em Ciclo Através da Pilha
Vamos demonstrar como navegar em ciclo numa pilha com diretórios aninhados, embora possa utilizar qualquer diretório em qualquer parte do sistema de arquivos.
O nosso nível de aninhamento mais profundo é:
/home/dave/Projects/htg/articles
A partir do diretório inicial, vamos descer gradualmente por cada diretório até atingir o diretório de artigos. De seguida, vamos visualizar a pilha de diretórios.
Executamos os seguintes comandos:
pushd ~/Projects
pushd htg
pushd articles
dirs -v -l
Ao executar repetidamente o comando pushd +1
, é possível percorrer a pilha de diretórios em ciclo contínuo. Se esta ação for frequente, o comando pushd +1
poderá ser um bom candidato para a criação de um alias.
Executamos o seguinte comando:
pushd +1
A Importância do Primeiro Diretório na Pilha
É fácil cair no hábito de usar o comando cd
para mudar de diretório. No entanto, ao fazer isso, o primeiro diretório da pilha é sobrescrito. Isso é inevitável, uma vez que o primeiro espaço é reservado para o diretório de trabalho atual; os outros diretórios não mudam de posição.
Para demonstrar isso, execute os seguintes comandos:
dirs -v -l
cd ~/Music
dirs -v -l
Depois de se familiarizar com os comandos pushd
e popd
, e talvez criar alguns aliases, terá uma forma muito rápida de alternar entre diretórios.
É por isso que se valoriza a linha de comando. A eficiência é realmente notável, certo?