2023年10月26日

MSYS2のバグ?(Bad address)

業務でシェルスクリプトを書いていて、非常に不可解な現象に遭遇しました。いまだに未解決ですが、メモを残しておきます。

以下が、現象が発生する最少シェルスクリプトとなります。
#!/bin/bash -xe

export LIBFLAGS="c:/ d:/"

/c/msys64/mingw64/bin/gcc.exe -v &> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.txt


本来は gcc のバージョン情報が出るはずですが、これを実行すると以下のように Bad address エラーが発生します。
./test1.sh: line 5: /c/msys64/mingw64/bin/gcc.exe: Bad address
再現に必要なポイントは以下になります。
  • 実行するアプリは何でも良い。
  • ファイルに標準出力と標準エラー出力を両方出力する。
  • ファイル名は何でも良く、ディレクトリや拡張子など全て含め 74 文字以上必要。(73 文字では発生しない。)
  • LIBFLAGS という変数を export する。(この変数は一切使っていません。)
  • LIBFLAGS が "c:/" で始まる文字列と "d:/" で始まる文字列を含む。(順番は問いません。)
MSYS2 の bash のバージョンは以下です。パスの記法上当然ですが Windows 限定です。(cygwin でも発生するかどうかは未確認です。)
$ bash --version
bash --version
GNU bash, version 5.2.15(2)-release (x86_64-pc-msys)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
あきらかにバグなんですが、とりあえず今はバグ報告などしている余裕が無いので KMC blog にメモだけしてお茶を濁しておきます。回避策は、ファイル名を短くする、LIBFLAGS というシェル変数名を避けるか使い終わったらすぐ unset するなど、いろいろありますので。

kmckk at 18:40コメント(0)メモ | 若槻 

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード