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

NYAGOS 4.2.5_beta でバッチファイルがエラーになります。 #296

Closed
spiegel-im-spiegel opened this issue Mar 27, 2018 · 9 comments
Assignees

Comments

@spiegel-im-spiegel
Copy link

spiegel-im-spiegel commented Mar 27, 2018

日本語ご容赦です。
以下のバッチファイルを 4.2.5_beta 上で実行するとバッチ処理完了後にエラーになります。

@echo off
setlocal

setlocal enabledelayedexpansion

set /a n = %~1
set /a b1 = 0
set /a b2 = 0

if %n% == 1 echo 1: %b2% && goto :end
echo 1: %b2%
set /a b2 = 1
if %n% == 2 echo 2: %b2% && goto :end
echo 2: %b2%
for /l %%i in (3, 1, %n%) do (
	set /a fib = !b1! + !b2!
	set /a b1 = !b2!
	set /a b2 = !fib!
	echo %%i: !b2!
)

:end
endlocal && set /a fib = %b2%

echo %~1th Fibonacci number is %fib%
endlocal

エラー内容はこんな感じです。

$ fibonacci.cmd 10
1: 0
2: 1
3: 1
4: 2
5: 3
6: 5
7: 8
8: 13
9: 21
10: 34
10th Fibonacci number is 34
't' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'd' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
指定されたパスが見つかりません。
open C:\Users\userbame\AppData\Local\Temp\nyagos-6296.tmp: The system cannot find the file specified.

ちょっと意地悪なコードかなぁという気もしますが,報告まで。

@hymkor hymkor self-assigned this Mar 27, 2018
@hymkor
Copy link
Collaborator

hymkor commented Mar 27, 2018

ご報告ありがとうございます。ですが、どうもこちらではうまく再現できません。

$ .\nyagos
Nihongo Yet Another GOing Shell 4.2.5_beta-amd64 by go1.10 & Lua 5.3
(c) 2014-2018 NYAOS.ORG <http://www.nyaos.org>
<DESKTOP-LGGUCRA:~/tmp>
% fibonacci.cmd 10
1: 0
2: 1
3: 1
4: 2
5: 3
6: 5
7: 8
8: 13
9: 21
10: 34
10th Fibonacci number is 34
<DESKTOP-LGGUCRA:~/tmp>

ただ、お見せいただいた出力を見る分では、パラメータの引き渡しに失敗しているように見えます(引数中に改行コードか何かが入っている?)

お手数ですが、fibonacci.cmd のあるフォルダーで「source -d fibonacci.cmd 10」を実行してみてから、%TEMP% にある更新日時が最も新しい nyagos-*****.cmd の中身を見せていただけないでしょうか。

本来であれば、

@call C:\Users\hymko\Share\bin\fibonacci.cmd 10
@set "ERRORLEVEL_=%ERRORLEVEL%"
@(cd & set) > "C:\Users\hymko\AppData\Local\Temp\nyagos-13020.tmp"
@exit /b "%ERRORLEVEL_%"

といったファイルになっているはずですが、最初の行がおかしくなっている可能性が高いと見ています。

よろしくお願いいたします。

@hymkor
Copy link
Collaborator

hymkor commented Mar 27, 2018

(参考)別件の不具合を確認・修正しました。

バッチファイル中に「exit」が /b オプションなしで実行すると、nyagos-****.cmd もひっくるめて CMD.EXE が即終了してしまうため、環境変数の内容が出力されないというものでした。

この手のバッチファイルは CMD.EXE 単体でも環境変数の読み込みができないため、今回( 0ed67e9 )はエラーメッセージを

C:\Users\hymko\ex.cmd: the batch file may use `exit` without `/b` option. Could not find the change of the environment variables

に変更するだけに留めました。

@spiegel-im-spiegel
Copy link
Author

実はこれを試したマシンは Windows アカウント名が漢字になってまして,上の手順でできてる nyagos-*****.cmd の中身も

@call fibonacci.cmd 10
@set "ERRORLEVEL_=%ERRORLEVEL%"
@(cd & set) > "C:\Users\漢字の~2\AppData\Local\Temp\nyagos-5312.tmp"
@exit /b "%ERRORLEVEL_%"

みたいな感じになってました(アカウント名は置き換えてます)。この辺が理由でしょうか。

ちなみにアルファベットのみのアカウント名ではうまくいきました。

@spiegel-im-spiegel
Copy link
Author

続きです。

環境変数を見ると USERPROFILE

USERPROFILE=C:\Users\漢字のユーザ名

となっているのに TEMP, TMP

TEMP=C:\Users\漢字の~2\AppData\Local\Temp
TMP=C:\Users\漢字の~2\AppData\Local\Temp

と短縮名になってるようです。設定側はどちらも

%USERPROFILE%\AppData\Local\Temp

なんですけどねぇ。ちなみに Windows 8.1 です。

@hymkor
Copy link
Collaborator

hymkor commented Mar 27, 2018

ありがとうございます。すばらしいエラーリポートです。
この手の問題に遭遇した人は「使えない」という烙印だけ押して、だいたい消えてしまうんですよね。
たすかります!

hymkor added a commit that referenced this issue Mar 27, 2018
…CRLF but LF and the value of %TEMP% was output with UTF8
@hymkor
Copy link
Collaborator

hymkor commented Mar 27, 2018

2点問題がありました。

  1. 一時ファイルのパスが、現在のコードページ文字列(ANSI / CP932)ではなく、UTF8 で出力されていた。
  2. 一時バッチファイルの改行コードが CRLF ではなく、LF になっていた。

これらを修正したところ「漢字のユーザ名」という名前のユーザでも、期待動作するようになりました。

不思議なことに、1. を修正すれば直りそうなものなのですが、なぜか 2. も合わせて修正しないと直りませんでした。であれば、なぜ英数字だけのユーザ名ではちゃんと動いていたのか…それが謎です。

ソースは 876a453 にて修正済みですが、そのうちバイナリも beta2 としてリリースしたいと思います。

hymkor added a commit that referenced this issue Mar 27, 2018
hymkor added a commit that referenced this issue Mar 27, 2018
(This is fixed before 4.2.5_beta2 is released)
@hymkor
Copy link
Collaborator

hymkor commented Mar 27, 2018

以上を反映したバイナリ: 4.2.5_beta2 を公開しました。

@spiegel-im-spiegel
Copy link
Author

4.2.5_beta2 を使って同環境で確認しました。問題ありません。
source -d を使って試してもみましたが出力されているファイルの内容も問題なさそうです。

素早い対応,ありがとうございました。

@hymkor
Copy link
Collaborator

hymkor commented Mar 28, 2018

動作確認ありがとうございました。

自分の環境だけでは気づけない問題があるので、たいへん、たすかりました。beta を出した甲斐があったというものです。もうしばらくだけ使って、特に問題ないようであれば、4.2.5_0 としてリリースしたいと思います。

それでは本件については、クローズさせていただきます。

@hymkor hymkor closed this as completed Mar 28, 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