Windowsで開発する時は、ターミナルとしてGit Bashを多用しています。が、たまに特有の仕様にひっかかってしまうことがあり、今回もそんなトピックとなります。
開発環境
- OS: Windows11 Home 21H2
$ bash --version GNU bash, version 4.4.23(2)-release (x86_64-pc-msys) ... $ mysql --version C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL)
詰まったところ
- Git Bashから
mysql -h ****** -P 3304 -u admin -p
でMySQLへ接続を試みようとしたが全く反応がない。- エラーすら出力されない。
- コマンドプロンプトから同様に
mysql -h ****** -P 3304 -u admin -p
を実行すると、こちらは問題なく接続成功。
対応
実は以前、Git BashでDockerを利用した時も似たような事象があり、ブログの記事にしていました。
winptyって?
内容が重複するので以前のブログ記事から引用しちゃいます。
git bashはデフォルトだと、minttyというターミナルエミュレータで動作しており、 minttyのおかげでWindows上でもUNIXライクなコマンドが使えるようになっています。
しかし、minttyからpythonやipconfig等のWindows上のプログラムを実行した場合、 互換性の問題から正しく実行できない場合が出てくるようです。
winptyはminttyからでもWindows上のプログラムとの入出力を正しく解釈できるように調整をしてくれます。
互換性の問題の具体例ですが、ipconfig
はWindowsのネイティブのコマンドではShift_JISで出力するのですが、一方でGit BashはUTF-8で出力を試みようとするために文字化けを起こすようです。
Git Bashでうまく動作しなかった場合は、minttyによるトラブルかどうか判断するために下記を試すといいかもしれませんね。
あとがき
Git Bashを使わなければこの煩わしさから解放されるとは思うのですが、個人的にLinuxライクにコマンドをうてる快適さからなかなか離れられないんですよね…。(VSCodeのターミナルもデフォルトはGit Bashにしてます)
参考
[Git Bash] winpty コマンドについて調べてみた | MSeeeeN | 大阪発 IT メディア by MSEN