Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

環境変数PATHに含まれているPATH中にある.bat ファイルが実行できない。 #343

Closed
orz-- opened this issue Dec 10, 2018 · 11 comments
Assignees

Comments

@orz--
Copy link

orz-- commented Dec 10, 2018

使用しているバージョンは
Nihongo Yet Another GOing Shell 4.3.3_3-amd64 by go1.11.1
です。
バッチファイルだと下記のような出力が表示されます。
exec: "": executable file not found in %PATH%

同じパスにある.exe は正常に実行できます。

ls -la で見ても実行権限は付与されています。
-rwxa-- 23 Feb 5 2010 XXXX.bat*

@orz-- orz-- changed the title PATHに含まれているPATH中にある.bat ファイルが実行できない。 環境変数PATHに含まれているPATH中にある.bat ファイルが実行できない。 Dec 10, 2018
@hymkor hymkor self-assigned this Dec 11, 2018
@hymkor
Copy link
Collaborator

hymkor commented Dec 11, 2018

すみません。環境変数 COMSPEC の内容はどうなっていますでしょうか?

@hymkor
Copy link
Collaborator

hymkor commented Dec 11, 2018

以下の結果も教えてください

  1. where XXXX
  2. cmd /c XXXX
  3. lua_e "print(nyagos.option.usesource)"

@orz--
Copy link
Author

orz-- commented Dec 12, 2018

nyagosだと
$ echo %COMSPEC%
%COMSPEC%

コマンドプロンプトだと
C:\Program Files\smartmontools\bin>echo %COMSPEC%
C:\Windows\System32\cmd.exe

whereの結果 nyagos でもコマンドプロンプトでも見つかります。
where xxxx
where xxxx.bat

cmd /c の結果 nyagos でもコマンドプロンプトでも実行できます。
cmd /c xxxx
cmd /c xxxx.bat

lua_e の結果
$ lua_e "print(nyagos.option.usesource)"
true

以上、よろしくお願いします。

@hymkor
Copy link
Collaborator

hymkor commented Dec 12, 2018

なぜか、nyagos 実行時に環境変数 COMSPEC が未定義になっていることがわかりました。
set COMSPEC= で COMSPEC を強制的に未定義状態にすると、このエラーはこちらでも再現します。
バッチを実行する際、%COMSPEC% /c "@call バッチファイル…" とやっており、COMSPECが空だと、空の名前のコマンドシェルを起動しようとして失敗しているようです。

.nyagos か、そこから load している lua スクリプトなどで、COMSPEC をクリアしてしまうような文を定義されていないでしょうか?
未定義だったら未定義なりに、CMD.EXE を名指しで呼び出すように直すこと自体は出来ますが、それはできれば最後の手段にしたいと考えています。

@orz--
Copy link
Author

orz-- commented Dec 12, 2018

set COMSPEC=C:\Windows\System32\cmd.exe
としたらバッチファイルの実行ができるようになりました。ありがとうございます。
特にカスタマイズはしておらず、アーカイブファイルを展開しただけの状態です。

@hymkor
Copy link
Collaborator

hymkor commented Dec 12, 2018

お手数ですが、Windows の

コンピューター
→ プロパティー
→ システムの詳細設定
→ 環境変数(N)

に COMSPEC があるかご確認いただけますか?

確認したところ、COMSPEC が未定義な場合でも CMD.EXE は自分自身を指すよう COMSPEC を設定するようです。ただし、その設定はその CMD.EXE と、自分の子プロセスにしか及びません。

この状態のデスクトップから NYAGOS を直接起動すると、本件のような症状が発生します。

@orz--
Copy link
Author

orz-- commented Dec 13, 2018

環境変数にCOMSPECはありませんでした。
ちなみにどのバージョンなら動くか、さかのぼって調べたところ 4.2.4_0 では動作しました。
4.2.5_beta から動作しなくなってました。

@hymkor
Copy link
Collaborator

hymkor commented Dec 13, 2018

4.2.5 からバッチ側での環境変数の変更を取り込むために、バッチ呼び出しまわりに小細工を組み込みましたので、そうだと思います。

@orz--
Copy link
Author

orz-- commented Dec 13, 2018

環境問題ということであれば 4.2.4_0 を使用するか
それか環境変数に
COMSPEC=C:\Windows\System32\cmd.exe
を設定して使用するつもりですが、
他に調査の手伝いできることはありますでしょうか。

@hymkor
Copy link
Collaborator

hymkor commented Dec 13, 2018

ありがとうございます。とりあえず、これまでの情報で Ok です。

対応として、%COMSPEC% が空の時は CMD.EXE を直指定するようにしましたので、次のリリースから問題は解消されると思います。

なお、現行バージョンでも

lua_e "nyagos.option.usesource=false"

で、期待動作すると思います。

@orz--
Copy link
Author

orz-- commented Dec 13, 2018

承知しました。次のリリース時にアップグレードしたいと思います。

早い対応ありがとうございました!

@orz-- orz-- closed this as completed Dec 13, 2018
hymkor added a commit that referenced this issue Dec 13, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants