Есть ли в Cygwin параметр конфигурации, чтобы при завершении Bash имени команды суффикс имени файла .exe
игнорировался (не включался)?
Объяснение проблемы
Когда для завершения имени команды используется завершение табуляции в Bash в системе Cygwin, к имени команды добавляется расширение .exe
, например, ввод текста opens
и нажатие клавиши Tab завершает команду для openssl.exe
.
Команда работает нормально (в MS Windows расширение .exe
является необязательным при выполнении команды), но проблема в том, что функция завершения _openssl()
предоставляемая пакетом bash-completion
complete, настроена только на предоставление завершений аргументов для openssl
- не 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
прежде чем я начну вводить аргументы команды. В идеале я бы хотел избежать необходимости делать это каждый раз, когда запускаю команду.
Что я пробовал / исследовал
Я подумал, что это, вероятно, невозможно без изменения исходного кода DLL-библиотеки Cygwin или завершения команды Bash (pcomplete.c
). Тем не менее, я заметил, что встроенные команды Bash, type
и command
автоматически удаляют суффикс .exe
из имен исполняемых файлов, например:
$ type -a openssl
openssl is /usr/bin/openssl
$ command -v openssl
/usr/bin/openssl
Похоже, что Bash, работающий в Cygwin, имеет некоторый механизм для предоставления простого имени команды (без расширения .exe
). Тем не менее, я был в недоумении относительно того, как - или если - это может быть использовано, чтобы опустить расширение файла при выполнении команд.