Cygwinには、Bashがコマンドの名前を入力したときに、ファイル名の.exe
サフィックスが無視される(含まれない)ように構成オプションがありますか?
CygwinシステムのBashでタブ補完を使用してコマンド名を補完する場合、コマンド名に.exe
拡張子が追加されます。たとえば、opens
と入力してを押します。 Tabopenssl.exe
へのコマンドを完了します。
コマンドは正常に実行されます(MS Windowsでは、コマンドの実行時に.exe
拡張子はオプションです)が、問題は、 bash-completion
パッケージによって提供される_openssl()
完了関数です。 openssl
の引数の補完を提供するようにのみ構成されており、openssl.exe
は提供しません。例えば:
$ complete -p openssl openssl.exe
complete -o default -F _openssl openssl
bash: complete: openssl.exe: no completion specification
all実行可能コマンドの引数を完成させようとすると同じ問題が発生します。
私は現在、Readline編集用に構成されたEmacsモードでBashを使用しているので、 Esc 続いて2つ Backspace コマンドの引数の入力を開始する前に、を押して.exe
サフィックスを削除します。理想的には、コマンドを実行するたびにこれを実行する必要はありません。
Cygwin DLLまたはBashのコマンド補完(pcomplete.c
)のソースコードを変更しないと、おそらくそれは不可能だと思いました。しかし、Bashの組み込みファイルであるtype
とcommand
は、実行可能ファイルの名前から.exe
サフィックスを自動的に削除します。
$ type -a openssl
openssl is /usr/bin/openssl
$ command -v openssl
/usr/bin/openssl
Cygwinで実行されているBashには、(.exe
拡張子なしで)裸のコマンド名を提供するための何らかのメカニズムがあるようです。ただし、コマンドを完了するときにこれを使用してファイル拡張子を省略できるかどうか、または使用できるかどうかについて、私は途方に暮れています。
Cygwinには、ファイル名の名前が完成したときにファイル名の.exe
拡張子を含まないようにBashを構成する構成オプションがisあることがわかりました。コマンド。
completion_strip_exe
オプション(BashのCygwinポートに固有)を有効にすると、私が望むことを実行できます。
shopt -s completion_strip_exe
この機能はあまり明確に文書化されていません:BashのCygwinマニュアルページのPathname Expansionセクションで大まかな言及があります(アップストリームソースコードには含まれていないため、含まれていません)公式のマニュアルページまたは Bashのドキュメント )に記載されています。 /usr/share/doc/Cygwin/bash.README
を熟読しているときに遭遇しました(この質問をしてから約4か月後):
7b。 'shopt -s complete_strip_exe'を使用すると、補完ストリップの.exeサフィックスが作成されます。
このオプションは、CygwinBashで5年以上使用されているようです。
-----バージョン4.1.9-1-2010-12-29 -----
DanColascioneからEXECIGNOREおよびcompletion_strip_exeパッチを追加します。
さらなる調査によると、この機能のパッチは Dan Colascioneによって提出された 2010年11月に 以下の説明 でした:
completion_strip_exe
は新しいシェルオプションです。有効にすると、bashは、長い「.-exe」サフィックスが付いた名前ではなく、プログラムの短い名前を使用しようとします。これをオンにすると、ピンは「ping」を完了します。
この機能と、このような優れたシェルを提供してくれたBashのメンテナに対して、Dan Colascione(私は彼に個人的に感謝するために個人的な電子メールを送信しました)に感謝します。