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.
Parte 5: A pilha de diretório e as Expansões do Shell
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.
Tome como exemplo a seguinte pilha de diretórios
Ex.:
user@linux:/etc$ dirs
/etc /usr/share/doc /var/log /etc ~
Vamos tentar criar um arquivo no elemento +2.
Ex.:
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.
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.
Tome como exemplo a seguinte pilha de diretórios
Ex.:
user@linux:/etc$ dirs
/etc /usr/share/doc /var/log /etc ~
Vamos tentar criar um arquivo no elemento +2.
Ex.:
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.
#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!