
So erhalten Sie die Liste aller übergeordneten Verzeichnisse.
Angenommen, ich befinde mich derzeit in
% pwd
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting
Ich will
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 /
Ich muss diese Ausgabe tatsächlich weiterleiten, rofi -dmenu
damit ich problemlos in die übergeordneten Verzeichnisse wechseln kann.
Die aktuelle Lösung, die ich verwende, pushd
ist
function d () {
select=$( dirs -v | head -10 | rofi -dmenu )
cd -${select:0:1}
}
Antwort1
Verwenden Sie eine Schleife, die bei beginnt $PWD
und jeweils eine Verzeichnisebene entfernt. Sie müssen nur darauf achten, bei zu enden /
. Zählen Sie auch die Zeilen (oder leiten Sie durch nl
). Hier ist eine Funktion, die sowohl in Bash als auch in Zsh funktioniert.
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 /"
}
Meine Version verwendet keine abschließenden Schrägstriche. Fügen Sie sie bei Bedarf hinzu.