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.
Além de servir para a movimentação do cursor a pilha de diretórios pode ser utilizada em conjunto com o recurso de expansões do shell, mais especificamente nas Expansões de Til.
No uso padrão do til ele sempre expandirá para o diretório /home do usuário corrente, porém ao adicionar um sinal de +N ou -N o til irá expandir para o elemento correspondente na pilha de diretórios em qualquer comando onde seja necessário passar um caminho de diretório como argumento.
user@linux:/etc$ touch ~+2/teste
touch: não foi possível tocar "/var/log/teste": Permissão negada
Note que o comando tentou criar um arquivo exatamente no segundo elemento a pilha de diretórios, só não o fez devido a falta de permissão de escrita para o usuário.
Nesse próximo exemplo vamos listar o conteúdo do diretório que consta no elemento -3.
Ex.:
user@linux:/etc$ ls -d ~-3/*/
/usr/share/doc/aac-enc/
/usr/share/doc/abntex/
/usr/share/doc/account-plugin-google/
/usr/share/doc/accountsservice/
/usr/share/doc/acl/
/usr/share/doc/acpid/
Outro ponto interessante é que é possível omitir o sinal de "+" (como na matemática) quando utilizamos a expansão por til. Assim os comandos utilizando a forma positiva de posicionamento ficam mais simples.
Ex.:
user@linux:/etc$ cd ~2
user@linux:/var/log$
Interessante notar pelo comando acima que através da expansão de til é possível utilizar também o comando interno "cd" para navegar entre os diretórios da pilha.
[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!
[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
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