nyagos では、バッチファイルを呼び出す時、環境変数の変更を取り込むため
%COMSPEC% /V:ON /S /C "call "バッチファイル名" & set "ERRORLEVEL_=!ERRORLEVEL!" & (cd & set > 一時ファイル名) "
ということをしていた。
が、これ、ERRORLEVEL の値を参照するために遅延評価オプションを有効にしなくてはいけないため、バッチ実行時の CMD.EXE のデフォルト状態が変わってしまうという問題があった。
が、今日、この解決法が分かった。
WSL/Cygwin/MSYS2のBashからWindowsの初期化バッチファイルを走らせて環境変数なんかを同期できるSourceWinBatを公開しました。"source init.bash"みたいな感覚で"sw init.cmd"して使います。自分用ですがWindows環境とWSLを併用するような人に便利https://t.co/7mSKe0SJm4 pic.twitter.com/LYolNFjrpf
— 🎍ぬるぽへ🍱 (@nullpo_head) January 5, 2019
リンク先の nullpo-head/source-win-bat のコードを見ると、
" & call set SW_EXITSTATUS=%^ERRORLEVEL% "
とかやってる。call set
!? なんじゃそりゃ
ぐぐってみると、解説記事があった。
なるほどね!さっそく nyagos にも組み込みました!