Como fazer com que "dirs" liste todo o DIRSTACK de um script?

Como fazer com que "dirs" liste todo o DIRSTACK de um script?

Meu script de teste:

#!/bin/bash
dirs -p >> work_note.txt

Em uma pilha de 10 diretórios, só recupero o primeiro. Se eu executar dirs -pou dirs -vna linha de comando, obtenho a pilha inteira.

Qualquer dica ou conhecimento sobre o que estou perdendo seria apreciada.

OBSERVAÇÃO Meu objetivo principal é criar um processo de logout que grave o DIRSTACK em um arquivo para que eu possa lembrar o trabalho que estava fazendo em um terminal. Normalmente tenho vários terminais funcionando.

Responder1

The DIRSTACKé uma variável local e não é passada para scripts, subshells, processos filhos e assim por diante. Eu recomendo usar uma função carregada em seu lugar .bashrcem vez de um script.

Responder2

Usei esse truque para recuperar minha pilha de diretórios em todas as sessões. Eu costumava salvá-lo em um arquivo. Também consigo importar/exportar para outros terminais

Defina esta função no seu .bashrc

stackd () 
{ 
    SAVEIFS=$IFS;
    IFS=$(echo -en "\n\b");
    builtin cd $@ && builtin pushd "$PWD" > /dev/null;
    dirs -l -p >> $HOME/.iostackd/dirstack && sort -u -o $HOME/.iostackd/dirstack $HOME/.iostackd/dirstack > /dev/null;
    IFS=$SAVEIFS
}

sobrecarregue seu buitin 'cd' por alias

alias cd='stackd "$1"'

informação relacionada