Как сделать так, чтобы «dirs» вывел весь DIRSTACK из скрипта?

Как сделать так, чтобы «dirs» вывел весь DIRSTACK из скрипта?

Мой тестовый сценарий:

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

В стеке из 10 каталогов я получаю только верхний 1. Если я запускаю dirs -pили dirs -vв командной строке, я получаю весь стек.

Буду признателен за любые советы или знания о том, чего мне не хватает.

ПРИМЕЧАНИЕ Моя главная цель — создать процесс выхода из системы, который записывает DIRSTACK в файл, чтобы я мог вспомнить, какую работу я делал в терминале. Обычно у меня работает несколько терминалов.

решение1

Это DIRSTACKлокальная переменная, которая не передается в скрипты, подоболочки, дочерние процессы и т. д. Я рекомендую использовать функцию, загруженную в ваш, .bashrcвместо скрипта.

решение2

Я использовал этот трюк, чтобы получить мой dir stack для каждой сессии. Я использовал его, чтобы сохранить в файле. Я также могу импортировать / экспортировать в другие терминалы

Определите эту функцию в вашем .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
}

перегрузить встроенный 'cd' псевдонимом

alias cd='stackd "$1"'

Связанный контент