Tornando persistente a pilha de diretórios 'pushd'

4

Ok, esta é uma pergunta curta. Acabei de saber que com o comando pushd , podemos adicionar mais diretórios de trabalho à nossa lista, o que é útil. Mas existe uma maneira de tornar esta lista permanente, para que ela possa sobreviver a reinicializações ou logoffs?

    
por Sollosa 16.05.2017 / 10:48

1 resposta

3

Você pode preencher previamente a pilha de diretórios no arquivo ~/.bashrc , se desejar:

for dir in "$HOME/dir" /usr/src /usr/local/lib; do
    pushd -n "$dir" >/dev/null
end

ou, se você quiser colocar os diretórios em uma matriz e usá-los de lá:

dirstack=( "$HOME/dir"
           /usr/src
           /usr/local/lib )

for dir in "${dirstack[@]}"; do
    pushd -n "$dir" >/dev/null
end

unset dirstack

Com -n , pushd não alterará o diretório de trabalho, mas apenas adicionará o diretório fornecido à pilha.

Se desejar, você pode armazenar o valor do ${DIRSTACK[@]} (nome da variável em maiúsculas aqui), que é a pilha do diretório atual , em um arquivo de ~/.bash_logout e, em seguida leia esse arquivo em ~/.bashrc em vez de usar uma matriz predefinida.

Em ~/.bash_logout :

printf '%s\n' "${DIRSTACK[@]}" >"$HOME/.dirstack"

Em ~/.bashrc :

while read dir; do
    pushd -n "$dir" >/dev/null
done <"$HOME/.dirstack"

Eu não sei o quão bem isso funcionaria em uma situação em que você usa vários terminais. O arquivo .dirstack seria sobrescrito toda vez que um terminal saísse, se ele executasse um bash como um shell de login.

    
por 23.05.2017 / 23:52

Tags