Gibt es eine Konfigurationsoption in Cygwin, so dass, wenn Bash den Namen des Befehls abschließt, der Dateiname .exe
Suffix wird ignoriert (nicht enthalten)?
Erklärung des Problems
Wenn Sie in einem Cygwin-System die Tab-Vervollständigung in Bash verwenden, um den Namen eines Befehls zu vervollständigen, die .exe
Erweiterung wird an den Befehlsnamen angehängt, z. B. Eingabe opens
und drücken Tab schließt den Befehl an openssl.exe
.
Der Befehl läuft einwandfrei (bei MS Windows das .exe
Erweiterung ist optional, wenn ein Befehl ausgeführt wird), aber das Problem ist, dass die _openssl()
Abschlußfunktion durch die bash-completion
package ist nur so konfiguriert, dass es Vervollständigungen von Argumenten für bereitstellt openssl
- nicht openssl.exe
. Zum Beispiel:
$ complete -p openssl openssl.exe
complete -o default -F _openssl openssl
bash: complete: openssl.exe: no completion specification
Das gleiche Problem besteht beim Versuch, Argumente für zu vervollständigen alles ausführbare Befehle.
Ich verwende derzeit Bash mit dem für die Readline-Bearbeitung konfigurierten Emacs-Modus, damit ich drücken kann Esc gefolgt von zwei Rücktaste drückt, um das zu entfernen .exe
Suffix, bevor ich die Argumente für den Befehl eingebe. Im Idealfall möchte ich vermeiden, dass ich dies jedes Mal tun muss, wenn ich einen Befehl ausführen.
Was ich ausprobiert habe
Ich dachte mir, dass dies wahrscheinlich nicht möglich ist, ohne den Quellcode der Cygwin-DLL oder den Abschluss des Befehls von Bash zu ändern ( pcomplete.c
). Ich bemerke jedoch, dass die Bash Builtins, type
und command
automatisch entfernen .exe
Suffix aus den Namen der ausführbaren Dateien, z.
$ type -a openssl
openssl is /usr/bin/openssl
$ command -v openssl
/usr/bin/openssl
Es scheint, dass Bash in Cygwin über einen Mechanismus verfügt, der den bloßen Befehlsnamen bereitstellt (ohne den .exe
Erweiterung). Ich habe jedoch keine Ahnung, wie - oder ob - die Dateierweiterung beim Ausführen von Befehlen weggelassen werden kann