
ich benutzeavfsum bequem von einer Shell-Eingabeaufforderung aus in Archive zu schauen. Dies erstellt eine Ansicht des gesamten Verzeichnisbaums unter ~/.avfs
(wenn also eine Datei /path/to/foo
existiert, ist sie auch als sichtbar ~/.avfs/path/to/foo
) und zusätzlich, wenn /path/to/foo
es sich um eine Archivdatei handelt, ~/.avfs/path/to/foo#
ein Verzeichnis, das eine Ansicht des obersten Verzeichnisses des Inhalts des Archivs ist.
Wenn ich das Innere eines Archivs erkunden möchte, ist das etwas umständlich: Ich muss in die ~/.avfs
Hierarchie wechseln, und die Vervollständigung voncd
hilft mir nichtum diese Archivnamen einzugeben und #
am Ende ein hinzuzufügen.
Ich möchte in der Lage sein, acd foo.zip
von auszuführen /path/to/dir
und auszuführen cd ~/.avfs/path/to/dir#
. Mit anständiger Vervollständigung für acd
. Wie kann ich das machen?
Antwort1
Hier ist meine Implementierung von acd
. Es macht das Richtige, egal, ob das Argument ein Verzeichnis oder ein Archiv ist. acd
ohne Argument ist gleichbedeutend mit acd .
.
avfs_cd () {
case "$2" in
"$HOME/.avfs/"*) :;;
/*) set -- "$1" "$HOME/.avfs$2";;
*) set -- "$1" "$HOME/.avfs$PWD/$2"
esac
if ! [ -d "$2" ]; then
set -- "$1" "${2}#"
fi
"$1" "$2"
}
alias acd='avfs_cd cd'
alias apushd='avfs_cd pushd'
Und hier ist meine Zsh-Vervollständigungsfunktion:
_acd () {
_dirs
_files -g "*.(7z|rar|tar.bz2|tar.gz|tar.xz|tbz2|tgz|zip)(e\\''REPLY=\${REPLY}\\#'\\')"
}
compdef _acd acd apushd