- 通常、環境変数は親プロセスから子プロセスへの一方通行で継承されるものであり、逆はありえない。
- CMD.EXE で「環境変数設定バッチ」というものが成り立つのは、バッチファイルを子プロセスではなく、バッチファイルを呼び出しているCMD.EXEプロセス自身でバッチファイルを読み取り、実行しているから
- 故に、バッチファイルを「子プロセスの CMD.EXE」で呼び出している NYAGOS では、CMD.EXEのような環境変数設定用のバッチファイルを期待通りに利用することはできないはず
だが、しかし:
t\batchtst.cmd
set F=%TIME%
cd "%TEMP%"
このバッチファイルを実行する時、4.2.5βでは、かわりに次のようなバッチファイルを生成・実行する。
%TEMP%\nyagos-11428.cmd
@call t\batchtst.cmd
@set "ERRORLEVEL_=%ERRORLEVEL%"
@(cd & set) > "C:\Users\(ユーザ名)\AppData\Local\Temp\nyagos-11428.tmp"
@exit /b "%ERRORLEVEL_%"
このテンポラリバッチは、本来実行すべきバッチファイル(t\batchtst.cmd
)を呼び出した後、%TEMP%\nyagos-11428.tmp
というファイルに
- 1行目:実行直後のカレントディレクトリ
- 2行目以降:「環境変数名=値」の繰り返し
という内容を出力する。後は nyagos.exe でこれを読みだして反映するだけ!
多分、これで環境設定バッチもバッチソだと思うんですが、どうでしょうか!
(正直、ひどい力業(ちからわざ)だとは思いますけどね)
この環境変数バッチを読み込む機能自体は、以前より source
というコマンドに実装されていた。4.2.5βではそれに対し、以下のような修正を行った。
-
source
と打たずとも、デフォルトのバッチファイル実行でも、反映機能が有効になるようにした。 -
%TEMP%\nyagos-(プロセスID).cmd
生成の際、バッチへの引数が正しく引き渡されない以下の不具合を修正- UTF8 のまま引き渡され、CMD.EXE 側で正しく受け取れなかった(⇒ 現在のコードページ文字列(ANSI)へ変換)
-
"&"
・">"
といった引数の二重引用符が外れてしまっていた(⇒ 元々の二重引用符をそのまま引き渡すように修正)
以上、開発の現場からでした。