![Как сделать так, чтобы «dirs» вывел весь DIRSTACK из скрипта?](https://rvso.com/image/170638/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D1%82%D0%B0%D0%BA%2C%20%D1%87%D1%82%D0%BE%D0%B1%D1%8B%20%C2%ABdirs%C2%BB%20%D0%B2%D1%8B%D0%B2%D0%B5%D0%BB%20%D0%B2%D0%B5%D1%81%D1%8C%20DIRSTACK%20%D0%B8%D0%B7%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%3F.png)
Мой тестовый сценарий:
#!/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"'