スクリプトから「dirs」を使用して DIRSTACK 全体をリストするにはどうすればよいですか?

スクリプトから「dirs」を使用して DIRSTACK 全体をリストするにはどうすればよいですか?

私のテストスクリプト:

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

10 個のディレクトリのスタックでは、先頭の 1 つだけが返されます。コマンド ラインでdirs -pまたはを実行すると、スタック全体が返されます。dirs -v

私が見逃しているものについてのヒントや知識があれば、ぜひ教えてください。

注記 私の主な目標は、ターミナルで実行していた作業を思い出せるように、DIRSTACK をファイルに書き込むログアウト プロセスを作成することです。通常、複数のターミナルが稼働しています。

答え1

DIRSTACKローカル変数であり、スクリプト、サブシェル、子プロセスなどに渡されません。.bashrcスクリプトの代わりに、 にロードされた関数を使用することをお勧めします。

答え2

このトリックを使って、セッションごとにディレクトリスタックを取得しました。以前はファイルに保存していました。他の端末にインポート/エクスポートすることもできます。

この関数を.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"'

関連情報