¿Cómo se puede hacer que los "directorios" enumeren todo el DIRSTACK de un script?

¿Cómo se puede hacer que los "directorios" enumeren todo el DIRSTACK de un script?

Mi guión de prueba:

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

En una pila de 10 directorios, solo obtengo el primero. Si ejecuto dirs -po dirs -ven la línea de comando, obtengo la pila completa.

Se agradecería cualquier consejo o conocimiento sobre lo que me estoy perdiendo.

NOTA Mi objetivo principal es crear un proceso de cierre de sesión que escriba DIRSTACK en un archivo para poder recordar qué trabajo estaba haciendo en una terminal. Normalmente tengo varias terminales funcionando.

Respuesta1

Es DIRSTACKuna variable local y no se pasa a scripts, subcapas, procesos secundarios, etc. Recomiendo usar una función cargada en .bashrclugar de un script.

Respuesta2

Utilicé este truco para recuperar mi pila de directorios en cada sesión. Solía ​​guardarlo en un archivo. También puedo importar/exportar a otros terminales

Defina esta función en su .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
}

sobrecarga tu buitin 'cd' por alias

alias cd='stackd "$1"'

información relacionada