
Как получить список всех родительских каталогов.
Предположим, что я сейчас нахожусь в
% 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
чтобы я мог легко перейти в родительские каталоги.
Текущее решение, которое я использую, pushd
это
function d () {
select=$( dirs -v | head -10 | rofi -dmenu )
cd -${select:0:1}
}
решение1
Используйте цикл, начиная с $PWD
и удаляя один уровень каталога за раз. Вам просто нужно быть осторожным, чтобы не закончить на /
. Также посчитайте строки (или пропустите через 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 /"
}
В моей версии не ставятся конечные слеши. Добавьте их, если хотите.