
すべての親ディレクトリのリストを取得する方法。
私が現在
% pwd
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting
欲しい
0 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting
1 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language
2 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/
3 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/
4 /media/blueray/WDPurple/_DataBackup/_Work/
5 /media/blueray/WDPurple/_DataBackup/
6 /media/blueray/WDPurple/
7 /media/blueray/
8 /media/
9 /
rofi -dmenu
実際には、親ディレクトリに簡単に cd できるように、この出力をパイプする必要があります。
私が現在使用しているソリューションpushd
は
function d () {
select=$( dirs -v | head -10 | rofi -dmenu )
cd -${select:0:1}
}
答え1
ループを使用して、 から開始し$PWD
、一度に 1 つのディレクトリ レベルを削除します。 で終了することに注意する必要があります/
。また、行を数えます (または をパイプしますnl
)。これは、bash と zsh の両方で機能する関数です。
function pwd_and_parents {
local d n
d=$PWD
n=0
while [[ $d = *[!/]* ]]; do
printf '%d %s\n' "$n" "$d"
d=${d%/*}
((++n))
done
echo "$n /"
}
私のバージョンでは末尾にスラッシュは付きません。 必要な場合は追加してください。