ZSH, чтобы автоматически заполнить каталоги в параметрах командной строки?

Вы могли использовать механизм в ядре inotify для контроля файлов, к которым получают доступ.

Сначала необходимо проверить если inotify включен в ядре:

pbm@tauri ~ $ zcat /proc/config.gz | grep CONFIG_INOTIFY
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y

Следующая вещь сделать установить inotify-tools. Инструкции для различных дистрибутивов, которые Вы могли найти на уровне страницы проекта - это должно быть в репозиториях всех основных дистрибутивов.

После этого inotify готов работать:

inotifywait /dirs/to/watch -mrq

(m = не выходите после одного события, r = рекурсивный, q = тихий)

Например - вывод после ls /home/pbm

pbm@tauri ~ $ inotifywait /bin /home/pbm -mq 
/bin/ OPEN ls
/bin/ ACCESS ls
/bin/ ACCESS ls
/home/pbm/ OPEN,ISDIR 
/home/pbm/ CLOSE_NOWRITE,CLOSE,ISDIR 
/bin/ CLOSE_NOWRITE,CLOSE ls

Важная вещь состоит в том, чтобы правильно установить каталоги для часов:

  • не смотреть / рекурсивно - существует большое чтение-запись к /dev и /proc
  • не наблюдайте свой домашний dir рекурсивно - при использовании приложений существует большое чтение-запись директорам конфигурации приложения, и браузеры представляют директоров

В /proc/sys/fs/inotify/max_user_watches существует параметр конфигурации, который показывает, за сколько файлов можно наблюдать одновременно. Значение по умолчанию (для хинду) о не настолько высоко, поэтому при установке наблюдателя на /home/ Вы могли превысить предел. Вы могли увеличить предел при помощи echo (корневой необходимый доступ).

echo 524288 > /proc/sys/fs/inotify/max_user_watches

Но перед этим необходимо читать о последствиях того изменения.

Опции, которые могли быть интересными для Вас:

  • -d = режим демона
  • -o file = вывод в файл
  • --format = указанный пользователями формат, больше информации в man inotifywait
  • -e EVENT = за развитием какое событие должно следиться (например, access, modify, и т.д., больше информации в man)

4
19.10.2010, 21:08
1 ответ

Zsh пытается быть умным в выборе завершений, но это не достаточно умно, чтобы знать это после doctrine --configuration=, это должно завершить имя файла. Bash или достаточно умен для парсинга этой команды правильно, или слишком глупый для завершения чего-либо кроме имени файла здесь.

Можно записать функцию завершения для doctrine. Это немного совершенствуется, хотя — функции завершения имеют тенденцию быть немного тайными. Можно найти легче записать completer использование альтернативной, более старой, более простой, но менее мощной системы завершения zsh, compctl (зарегистрированный в zshcompctl страница справочника).

Если у Вас есть функция завершения удара для doctrine, Вы смогли заставлять zsh читать его включением autoload bashcompinit; bashcompinit в Вашем ~/.zshrc. Посмотрите Переключение с удара на zsh Wiki.

Можно найти полезным связать несколько ключей к _bash_complete-word. Этот виджет (интерактивная команда) выполняет завершение нескольких встроенных типов, в зависимости от последнего знака в сочетании клавиш, которое вызвало виджет: / для каталогов, $ для названий параметра, и т.д. Например, включать bindkey '^X/' _bash_complete-word в Вашем ~/.zshrc, и нажмите Ctrl+X / для завершения имени файла в любом контексте (Вы, возможно, должны были бы временно вставить пробел перед именем файла, если имени файла предшествует пунктуация, которая не является разделителем слов в оболочке).

5
27.01.2020, 20:54
  • 1
    FWIW, я полагаю что bash значения по умолчанию поведения к идентификации --anything= как префикс к потенциальному имени файла, если это не знает о некотором другом завершении, которое могло пойти туда. –  BRPocock 15.12.2011, 00:02

Теги

Похожие вопросы