Intereting Posts
Docker Debian Jessie: не удается найти / var / log / syslog Поиск строк в текстовом файле для шаблона между двумя позициями и печать всей строки Измените приглашение PS1 в подэлементе sh, вызванном из родительского bash Сравнение и расширение брекетов Как декомпонировать окно с помощью xprop как я recursivley grep (или иначе искать) шестнадцатеричные строки Извлечение информации о трассировке с помощью gawk Debian Jessie Nvidia – проприетарные драйверы и кнопки яркости экрана Как установить mailman, когда ему нужна более старая версия Python? Общий счетчик трафика для каждого пользователя Найти варианты свопинга, которые в настоящее время используются Скажите сетевому менеджеру приостановить действие Почему моя настройка блока blockdev не выполняется из rc.local при перезагрузке Удаленный DLNA / UPnP Media Client / Controller Не удалось загрузить программу iperf3 после установки на сервере AIX 7.1

Скрыть некоторые команды от завершения bash?

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

$ pyt[TAB][TAB] pytest python python-config python-dbg 

В 99% случаев я пошел на python . Это так раздражает, что pytest и мешает мне печатать только pyt[TAB][RETURN] чтобы вызвать python . Могу ли я скрыть pytest от завершения bash?

Мои ограничения:

  1. Я знаю, что я могу удалить pytest файл pytest в /usr/bin/pytest чтобы предотвратить предложение в bash. Но что, если у меня нет доступа root? Что, если pytest – это сценарий важности, который должен существовать, чтобы позволить другому скрипту работать правильно?

  2. Несмотря на то, что я могу удалить pytest файл pytest (и я сделал это раньше), некоторое время, когда я обновляю свое программное обеспечение, этот скрипт возвращается снова.

  3. Я знаю, что я могу использовать alias чтобы сохранить нажатия клавиш для моего любимого приложения (возможно, просто p для python ). Но мне не нравится эта нестандартная аббревиатура. Его вид заставляет меня запутывать, когда удаленный от других машин.

Итак, так или иначе, чтобы скрыть некоторые команды от завершения bash? Ответ в другой оболочке (zsh, fish и т. Д.) Приветствуется, поскольку bash не ускоряет мой рабочий процесс в последнее время.

Это довольно ново, но в Bash 4.4 вы можете установить переменную EXECIGNORE :

аа. Новая переменная: EXECIGNORE; отдельный список шаблонов, который приведет к игнорированию совпадающих имен файлов при поиске команд.

Из официальной документации :

EXECIGNORE

Список шаблонов оболочки, разделенных двоеточиями (см. Сопоставление шаблонов ), определяющий список имен файлов, которые будут игнорироваться при поиске команд с использованием PATH. Файлы, полные пути которых соответствуют одному из этих шаблонов, не считаются исполняемыми файлами для целей завершения и выполнения команд с помощью поиска PATH. Это не влияет на поведение [, test и [[команд. Полные пути в хэш-таблице команд не подлежат EXECIGNORE. Используйте эту переменную, чтобы игнорировать файлы разделяемой библиотеки, у которых установлен исполняемый бит, но не являются исполняемыми файлами. Соответствие шаблону отличает настройку опции оболочки extglob.

Например:

 $ EXECIGNORE=$(which pytest) 

Или с помощью сопоставления с образцом :

 $ EXECIGNORE=*/pytest