Pilha de Diretórios (comandos pushd, popd e dirs)

A Pilha de Diretórios é um recurso do GNU Bash voltado para facilitar a navegação e manipulação de diretórios. É um recurso onde o usuário pode criar "atalhos" dentro de uma pequena base de diretórios que podem ser facilmente acessados ou referenciados dentro de uma seção do shell. Devido a grande popularidade do GNU Bash vale a pena conhecer esse recurso.

[ Hits: 21.470 ]

Por: Jeremias Alves Queiroz em 07/01/2016


A pilha de diretórios e seus comandos - pushd



O GNU Bash pode armazenar uma lista (em formato de pilha) dos diretórios visitados recentemente em uma seção de uso, lembrando que até mesmo cada script de GNU Bash é uma seção independente. O comando interno "pushd" tem a capacidade de mudar o diretório corrente (tal como o comando interno cd) e ao mesmo tempo insere esse diretório à pilha de diretórios. O comando "popd" remove o diretório especificado da pilha e muda o diretório corrente para este. Já o comando interno "dirs" mostra o conteúdo da pilha de diretórios.

Comandos internos para manipulação e navegação na pilha de diretórios

pushd

pushd [-n] [+N | -N | dir ]

É o principal comando de manipulação da pilha de diretórios, executa a entrada de um novo diretório na pilha e também executa a alternância entre as posições de diretórios armazenadas na pilha.

Sua sintaxe é simples, ao entrar com o comando seguido de um diretório como argumento ele irá armazenar o diretório corrente no topo da pilha e posteriormente mudará o diretório corrente para o que foi informado na linha de comando. O pushd executará esse mesmo processo independente de quantas mudanças de diretório forem executada e acumulará um histórico dos diretórios alternados dentro da pilha.

Ex.:

user@linux:~$ pushd /etc
/etc ~

user@linux:/etc$ pushd /var
/var /etc ~

O comando pushd, no ato de sua execução, já exibe como saída o conteúdo da pilha de diretórios. No primeiro exemplo acima temos o diretório corrente (~) sobre o diretório que o usuário indicou (/etc). Já na segunda execução do comando podemos reparar que a pilha aumentou constando 3 diretórios nela. Na exibição do conteúdo da pilha de diretórios importa dizer que o primeiro diretório exibido da esquerda para a direita é sempre o diretório corrente.

-n

O único argumento opcional disponível é o "-n", este é utilizado para o preenchimento da pilha de diretórios sem executar a mudança do diretório atual (não executa o dir após salvar o diretório).

Ex.:

user@linux:/var$ pushd -n /usr/share
/var /usr/share /etc ~

[+N | -N]

Este é o segundo tipo de argumento que o pushd aceita, no caso estes são os direcionais de navegação na pilha de diretórios.

Aqui é importante entender a forma em que é feita a leitura dessa pilha. No caso a contagem é executada de forma diferente, dependendo do argumento direcional usado, porém independente do direcional a contagem sempre irá começar por 0 (zero), após isso cada elemento será incrementado da esquerda para a direita no caso do argumento +N e da direita para a esquerda no caso do argumento -N. O seguinte esquema exemplifica esse conceito.

    +N  ===>
    /var/log /usr/share /etc ~   # -- Conteúdo da pilha de diretórios
    |   0   |    +1    | +2 |+3
    
    -N  <===
    /var/log /usr/share /etc ~   # -- Conteúdo da pilha de diretórios
    |  -3   |    -2    | -1 |-0

Assim executando a correta leitura da pilha de diretórios podemos usar os direcionais, mantendo o mesmo exemplo de pilha acima.

Ex.:

/var/log /usr/share /etc ~ # -- Conteúdo da pilha de diretórios

user@linux:/var/log$ pushd +2 # -- Mudamos para o 2º elemento da esq => dir

/etc ~ /var/log /usr/share # -- Conteúdo da pilha de diretórios atualizado

user@linux:/etc$ pushd -1 # -- Mudamos para o 1º elemento da dir => esq

/var/log /usr/share /etc ~ # -- Conteúdo da pilha de diretórios atualizado

user@linux:/var/log$

Se o comando pushd for inserido sem nenhum argumento sempre será assumido o argumento +1. Continuando o exemplo acima:

user@linux:/var/log$ pushd
/usr/share /var/log /etc ~
user@linux:/usr/share$

Um detalhe importante é que sempre o primeiro diretório da esquerda para a direita será o diretório corrente. Dessa forma o +0 é inútil pois ele representa o diretório corrente, porém o -0 é utilizável para ficar fácil de entender no exemplo acima ele seria a mesma coisa do que o elemento +3.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. A pilha de diretórios e seus comandos - pushd
   3. A pilha de diretórios e seus comandos - dirs
   4. A pilha de diretórios e seus comandos - popd
   5. A pilha de diretório e as Expansões do Shell
   6. Conclusão
Outros artigos deste autor

Mais desempenho no GNU Emacs com o YASnippet

Leitura recomendada

O que é o Linux

FreeRADIUS - Noções básicas - Parte I

Gerenciamento de pacotes Debian - principais comandos LPIC-1

Rocky Linux - Novo Substituto do CentOS

Instalação do Slackware 10.2 em 1 hora

  
Comentários
[1] Comentário enviado por fabio em 07/01/2016 - 07:53h

Excelente artigo, favoritado! Já estou inclusive usando. Fiz assim no meu ~/.bashrc:

#definindo pilha - diretorios mais usados
pushd dir1
pushd dir2
...
pushd dir8
cd

Daí quando abro um terminal já tenho a pilha definida com meus principais diretórios e a partir de agora passarei a navegar com "cd ~[numero]". Show de bola!

[2] Comentário enviado por danniel-lara em 07/01/2016 - 09:54h

Parabéns muito bom mesmo

[3] Comentário enviado por azk em 07/01/2016 - 14:45h

excelente artigo, de fato!
como o Fabio fez, tbm estou fazendo....

[4] Comentário enviado por Arthur_Hoch em 07/01/2016 - 23:21h

Estou usando.
Valeu!!!

Para criar arquivos é melhor utilizar " $ >" do que "$ touch":
[arthurhoch@halt ~]$ time > oi
real 0m0.000s
user 0m0.000s
sys 0m0.000s
[arthurhoch@halt ~]$ rm oi
[arthurhoch@halt ~]$ time touch oi
real 0m0.047s
user 0m0.000s
sys 0m0.000s

[5] Comentário enviado por luiztux em 08/01/2016 - 13:09h

Excelente!
Parabéns pelo ótimo artigo. Carecíamos de informações assim.


[6] Comentário enviado por removido em 13/01/2016 - 23:45h

Parabéns. Realmente há poucas fontes e faz um tempo que queria aprender isto.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts