Завершение табуляции для аргументов команды не работает в Cygwin из-за суффикса `.exe`

Возможно ли, что в Cygwin есть опция конфигурации, так что, когда Bash завершает имя команды, расширение .exe файла filename не включено?


При использовании завершения вкладки в Bash в системе Cygwin для завершения имени команды расширение .exe добавляется к имени команды, например, ввод opens и нажатие Tab завершает команду openssl.exe .

Команда работает нормально (с MS Windows расширение .exe является необязательным при запуске команды), но проблема в том, что _openssl() завершения _openssl() предоставляемая пакетом bash-completion настроена только для обеспечения завершения аргументов для openssl – not openssl.exe .

 $ complete -p openssl openssl.exe complete -o default -F _openssl openssl bash: complete: openssl.exe: no completion specification 

Такая же проблема возникает при попытке завершить аргументы для всех исполняемых команд.

В настоящее время я использую Bash с режимом Emacs, настроенным для редактирования Readline, поэтому я могу нажать Esc, за которым следуют два нажатия Backspace, чтобы удалить суффикс .exe прежде чем я начну вводить аргументы для этой команды. В идеале я бы не хотел этого делать каждый раз, когда я запускаю команду.


Я полагал, что, вероятно, это невозможно без изменения исходного кода библиотеки Cygwin DLL или завершения команды Bash ( pcomplete.c ). Тем не менее, я замечаю, что встроенные Bash, type и command автоматически .exe суффикс .exe от имен исполняемых файлов, например,

 $ type -a openssl openssl is /usr/bin/openssl $ command -v openssl /usr/bin/openssl 

Кажется, что у Bash, работающего в Cygwin, есть механизм для предоставления имени команды (без расширения .exe ). В любом случае, альтернативные предложения приветствуются.

    One Solution collect form web for “Завершение табуляции для аргументов команды не работает в Cygwin из-за суффикса `.exe`”

    Оказывается, в Cygwin есть опция конфигурации, которая настраивает Bash, чтобы не включать расширение .exe имени файла, когда оно завершает имя команды.

    Включение параметра complete_strip_exe (определенного для порта Cygwin Bash) делает то, что я хочу:

     shopt -s completion_strip_exe 

    Эта функция не очень задокументирована: она содержит краткое упоминание в разделе «Расширение пути » на странице руководства Cygwin для Bash (она не включена в исходный исходный код, поэтому не документируется на официальной странице руководства или документации для Bash ). Я столкнулся с этим во время просмотра /usr/share/doc/Cygwin/bash.README (через 4 месяца после запроса этого вопроса):

    7b. Используя 'shopt -s completion_strip_exe' делает суффиксы завершения строки .exe.

    Кажется, что этот вариант доступен в Cygwin Bash уже более 5 лет:

    —– версия 4.1.9-1 – 2010-12-29 —–
    Добавьте исправления EXECIGNORE и complete_strip_exe от Dan Colascione.

    Дальнейшие исследования показывают, что патч для этой функции был представлен Дэном Коласионе еще в ноябре 2010 года со следующим описанием :

    completion_strip_exe – это новый вариант оболочки. Когда включено, bash пытается использовать короткое имя программы вместо более длинного «.-Exe» -suffixed. При этом, контакт заканчивается на «ping».

    Большое спасибо Дэну Коласионе (я только что отправил ему личное письмо, чтобы лично поблагодарить его) за эту функцию и сопровождающих Баша за предоставление такой прекрасной оболочки.

    Interesting Posts

    Делать файлы во временных папках автоматически удаляются?

    Ubuntu автоматически монтирует диски NTFS в режиме только для чтения

    Почему беспроводная сеть дает более точное местоположение, чем проводная сеть?

    Восстановить Win 7 MBR без восстановления / установки диска

    Есть ли список / журнал драйверов установки Windows XP, загруженных во время установки?

    Ничто в панели задач не работает или не открывается, запускает WerFault.exe, если что-либо нажато

    Спящий компьютер с тайм-аутом из командной строки в Windows 7

    Значки рабочего стола меняют положение

    Как я могу переназначить Control + e на Escape + Control + e в iTerm2?

    Как «монтировать» раздел в Windows 7?

    Неизвестный кодер 'libmp3lame' в Ubuntu 14.04

    Родная альтернатива wget в Windows PowerShell?

    Как изменить порядок страниц, открытых при запуске Google Chrome?

    Предотвратите удаление Excel скопированных данных для вставки после определенных операций без буфера обмена Office

    Слияние нескольких строк

    Давайте будем гением компьютера.