Если Вы не имеете никакого контроля над сетью вообще, и также никакое управление клиентскими компьютерами и Вашим сервером не доступно снаружи, я боюсь это не возможный. Предположите, что это было бы, что будет препятствовать тому, чтобы Вы перенаправили Google или stackexchange к Вашему серверу?
Что можно сделать, должен попросить администратор создавать запись DNS для abcd
указать на Ваш IP-адрес. Затем все, в чем Вы нуждаетесь, является веб-сервером, слушающим на стандартных портах. Если он отказывается от всего, что можно сделать, доступ веб-сервер через IP-адрес вместо имени хоста.
В ZSH вы можете использовать Compctl -k
, чтобы зарегистрировать свою собственную функцию для параметров завершения генерации. Например:
compctl -f -c -u -r -K myAVFScompletion "*" -tn
Затем вам нужно определить свою собственную функцию:
myAVFScompletion () {
read -c COMMAND ARGS
# Decide what paths you want to suggest completion for
# by looking inside the ~/.avfs folder.
# Place your suggestions into an array:
reply=( a_path b_path ... )
}
Очевидно, что вышеупомянутая потребуется еще некоторую работу, но с чего начать.
Аналогичная (но другая) пользовательская функция завершения может быть зарегистрирована для Bash.
Вот пример с реализациями для Bash и ZSH . (Он предлагает завершение параметров командной строки, схватив параметры на странице человека команды.)
И вот некоторые быстрые догадки у вещей, которые могут работать внутри вашей функции завершения:
if [[ -d "$ARGS#" ]]
then reply=( "$ARGS#" )
else reply=
fi
или, возможно, это:
reply=( $(find ~/.avfs -type f -name "*.tgz" -or -name "*.zip" | sed 's+$+#+') )
Удачи!
Фальшивый ответ кажется недостаточным для этого поддельного вопроса; поддержка сборки zsh для каталогов автомобилей работает на каталогах (fake-файлы dir:names
), а не на шаблонах файлов в них. Это удобно для добавления специфических именованных файлов в каталог, который может подходить для automount
или sshfs
или настройки типа NetApp .snapshot
, в которых каталог, монтируемый в каталог, является известным статическим именем, ALAS
.
autoload -U compinit
compinit
zstyle ':completion:*' fake-files $HOME/.avfs:'ALAS POOR YORICK'
zshall(1)
говорит, что "имена" - это строки, а эксперименты указывают на мета-символы (например #
или \#
или '*(e: "echo hi":)'
) "не работают" по-разному, поэтому я не знаю, как прокрасть глобус в часть имен утверждения fake-файлов
. (Рассмотрение Src/Zle/computil.c
может точно показать, какими могут быть имена, но это было бы больше похоже на работу). (Также, использование рекурсивных глобусов в позиции каталога для именования архивных файлов не летало, но опять же, потребуется погружение на C, чтобы увидеть, сколько подделок
позволяет вам уйти от этого. )
С помощью compdef
можно перечислить завершения каталога .avfs
:
compdef '_files -g $HOME/.avfs/\*' -p \^
function andthehash {
reply=($REPLY $REPLY\#)
}
compdef "_files -g $HOME/.avfs/'*(+andthehash)'" -p \^
За исключением того, что это не удастся, так как он покажет файлы #
только тогда, когда это не имеет значения, и, таким образом, не сможет завершить их на них. (Есть продуктивное использование этой формы, хотя и не для этого случая.)
Использование zstyle
приближает вас к следующему .zshrc
:
autoload -U compinit
compinit
function UnderAVFS {
local pdir
[[ -z $1 ]] && return 1
pdir=$1:a
[[ ! -d $pdir ]] && pdir=$pdir:h
[[ ! -d $pdir || $pdir == . ]] && return 1
while [[ $pdir != / ]]; do
[[ $pdir == $HOME/.avfs ]] && return 0
pdir=$pdir:h
done
return 1
}
function AVFSExtras {
if UnderAVFS $REPLY; then
reply=($REPLY)
# TODO embiggen list of archive suffixes
[[ $REPLY == *.(bz2|tbz2) ]] && reply+=($REPLY\#)
fi
}
# Try to match avfs, otherwise the default pattern. Probably could greatly
# benefit from caching, to avoid hits on UnderAVFS function.
zstyle ':completion:*' file-patterns '*(+AVFSExtras):avfs-files' '%p:all-files'
Однако, он может заполнять только до \#/
бита (на debian squeeze virt с настройкой avfs по умолчанию), но не в виртуальную файловую систему для архива, поэтому потребуется дополнительная работа, чтобы занести заполненные файлы в архивы. Я предполагаю через _call_program ... ls
или что-то в этом роде для завершения в бите \#
, если только нет более элегантного способа обмануть zsh
, чтобы поверить в то, что каталоги, которых не существует, существуют.
Плохие новости! Завершение не проходит через _path_files
для поддельных каталогов; подозреваю, что это связано с zsh globbing. Как zsh 4.something on, так и zsh 5.0.8 демонстрируют проблему. Поэтому я подозреваю, что для полного исправления потребовались бы патчи к _path_files
, или чтобы написать что-нибудь другое, что в противном случае завершилось бы на этих поддельных каталогах. Отладочная трасса завершения может быть сгенерирована путем ввода ls /root/.avfs/root/sometar.gz\#/
, а затем в конце этого ввода controll-x
и затем ?
, предполагая, что связующая клавиша -e
и что _complete_debug
обязательно скажет клавишу keycombo, если кто-то захочет разобраться, почему это не удается.