Report: PATHEXT Inheritance problem
現在 nyagos では PATHEXT に .lua が追加されます。
これ自体は nyagos shell として有用だと思います。
ただ、この設定は起動するプロセスに継承されており(ex cmd.exe)、その場合、luaスクリプトファイルでコマンドとして処理されるものがあっても、実際は lua ファイルオープンになります。
そこまで極端な問題はそうそうは発生しませんが、cmd.exe に限らず予期せぬタイミングで、裏でコマンド実行をして、それがluaファイルオープン動作になってしまうことで本来の動作が阻害することがあります。
(GUI/CUIプロセスに限らず、裏でなにかしらのコマンドを実行することは多々あるため)
システムにluaの実行エンジンがないかぎりは、PATHEXTに .lua があってコマンドとして認識して動作することができるのは nyagos shell 内に居る間に閉じます。
nyagosが生成する子プロセスへ継承する環境変数情報からは、この設定は除外したほうがよいのではないでしょうか?
気付いた経緯
以前からnaygosのリポジトリでの作業で、VimでcatalogのLuaファイルを編集をしようとすると、「git.lua を開こうとするなあ...、止まらんし」というのがあったのですが(裏で定期的にgitの状態を取ろうとしていた)、直接Explorerから起動したVimでやれば問題はありませんでした。 これを調べていたら、PATHEXTによるコマンド誤認(Windowsはカレントが最優先のPATH解決先)だろうということが発覚しました。
PATHEXT は、nyagos.d\suffix.lua で変更していますが、これは確かに無くした方がよさそうですね。 (.pl とか、.awk とか、他の拡張子も合わせて変更していたが、それも外すべきか)
ただ、いきなり外すと思わぬところで影響がでるかもしれませんので、次の直近バージョンでは見送って、その次のリリースあたりで対応しようかと思います(=ソース上ではすぐ修正するが、バイナリに反映するまで猶予期間をとる)
そうですね、影響範囲がわかりませんので、そこは慎重に対応なのは了解です。 子に引き継がれなければいいのですが、そのあたりも含めて検討時間、確認時間は必要ですし。 (自分はワークアラウンドすればいいので)
ありがとうございます。
PowerShell のスクリプトを実行しようとして気がついたのですが、PATHEXT に拡張子を登録していない場合、コマンド名補完の対象外になってしまう問題がありました。 ( 拡張子 .ps1 がデフォルトの PATHEXT に登録されていないのは、もしかしたら自分の環境だけかもしれませんが…)
安直ですが、suffix.lua での登録先は NYAGOSPATHEXT という別の環境変数とし、コマンド名補完はそちら「も」見るようにしようかと思います。
https://github.com/nyaosorg/nyagos/releases/tag/4.4.13_1 にて起動したコマンド(vim,cmdなど)でsuffixに追加されていないこと、コマンドで誤認識動作がないことが確認できました。
ありがとうございました。 closeします。