Windows10 の GitBash で docker/telnet/python/mysql が実行できない場合は winpty で実行 (the input device is not a TTY. If you are using mintty, try prefixing the command with ‘winpty’)
GitBash で実行するとエラーになったり無反応だったりする
Windwos で bash を利用している際に、GitBash が便利で利用してるのですが、うまく動作しないことがあります。
例えば、docker、telnet、python、mysql などです。
GitBash で docker を実行するとエラーになる
GitBash で docker を実行した場合は以下のようなエラーになりました。
$ docker run -it ubuntu bash
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
GitBash で Telnet が実行できない
通常コマンドプロンプトであれば、以下のように telnet が起動しますが、
C:\WINDOWS\system32>telnet
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
Microsoft Telnet>
しかし、GitBash から同じように telnet コマンドを実行すると、Telnet のモードにはならず終了してしまいます。
このような感じです。
$ telnet
$
GitBash で python や MySQL を実行しても無反応
docker や telnet と同様に python や MySQL も実行することが出来ません。
通常は、python を実行するとこのように python のインタラクティブモードになりますが、無反応になります。
$ python
原因:インストール時に UseMinTTY を選択している
GitBash をインストールする際に以下の画面で「Use MinTTY」を選択しているからです。
但し、このオプションを設定している場合でも回避方法はありますので大丈夫です。
対応方法:winpty を付けて実行する
MinTTY を選択して GitBash インストールした場合は、MinTTY ターミナルエミュレーターとして GitBash が実行されます。
そして、その場合 Windows のコンソールプログラムを実行する場合は「winpty」を付けて実行する必要があります。
よく見ると、docker 実行時のエラーメッセージにも書いていますね。。。
telnet と python で試してみましょう。
winpty telnet
$ winpty telnet
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
Microsoft Telnet>
コマンドプロンプトで実行した場合と同じ動作になりました!
winpty python
$ winpty python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
python のインタラクティブモードも実行できました!
winpty を毎回付与するのは面倒なので.bashrc に登録する
単純に.bashrc ファイルに以下のように alias で winpty を付けて実行するようにします。
alias telnet='winpty telnet'
alias python='winpty python'
これで、winpty を付ける必要もなくなりました。