Git Bashは、vagrant で仮想マシンを使っていたり、外部サーバーへsshでログインして操作するときの端末としてすごく便利です。
ただ、コマンドプロンプトにあるコマンド、例えば、ping などを実行すると、文字化けしてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ ping google.com google.com [172.217.161.78]▒▒ ping ▒?M▒▒▒Ă▒▒܂▒ 32 ▒o▒C▒g▒̃f▒[▒^: 172.217.161.78 ▒▒▒▒̉▒▒▒: ▒o▒C▒g▒▒ =32 ▒▒▒▒ =5ms TTL=56 172.217.161.78 ▒▒▒▒̉▒▒▒: ▒o▒C▒g▒▒ =32 ▒▒▒▒ =7ms TTL=56 172.217.161.78 ▒▒▒▒̉▒▒▒: ▒o▒C▒g▒▒ =32 ▒▒▒▒ =5ms TTL=56 172.217.161.78 ▒▒▒▒̉▒▒▒: ▒o▒C▒g▒▒ =32 ▒▒▒▒ =5ms TTL=56 172.217.161.78 ▒▒ ping ▒▒▒v: ▒p▒P▒b▒g▒▒: ▒▒▒M = 4▒A▒▒M = 4▒A▒▒▒▒ = 0 (0% ▒̑▒▒▒)▒A ▒▒▒E▒▒▒h ▒g▒▒▒b▒v▒̊T▒Z▒▒▒▒ (▒~▒▒▒b): ▒ŏ▒ = 5ms▒A▒ő▒ = 7ms▒A▒▒▒▒ = 5ms user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ |
これは、Git Bashの端末の文字コードがUTF-8なのに対して、コマンドプロンプトのコマンド($PATHに設定されているフォルダにあるウィンドウズのコマンド)は、Shift-JISベースのCP932という文字コードを使っているからです。
この記事では、そんなウィンドウズのコマンドをGit Bashで実行したときに、文字化けせず結果を表示する方法を説明します。
Git Bashでコマンドプロンプトのコマンド実行すると文字化けするのを解消する方法
文字コードを変換する関数をbashに定義して、ウィンドウズのコマンドを実行するときは、その関数を使うようにします。
- 文字コード変換関数の定義
- 文字コード変換関数を使ったウィンドウズコマンドの実行方法
- alias(エイリアス=別名)登録による自動化
の順で説明します。
文字コード変換関数の定義
bash は、起動時に、~/.bashrc という環境ファイルの設定を読み込みます。
~ は、ホームディレクトリになってます。
Git Bash ではホームディレクトリは、
1 |
c:\Users\ログインユーザ名 |
となってます。
Git Bash空であれば、~ でアクセスできます。編集してみましょう。
vimを使うのであれば、 vim ~/.bashrc で、ホームディレクトリの.bashrcファイルを編集します。
1 2 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ vim ~/.bashrc |
下リストのように、 function cmdwin() を定義しましょう。
1 2 3 4 5 6 7 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ cat ~/.bashrc function cmdwin() { CMND=$1 shift $CMND $* 2>&1 | iconv -f cp932 -t utf-8 } |
編集した後は、source コマンドで設定を読み込みます。
1 2 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ source ~/.bashrc |
文字コード変換関数を使ったウィンドウズコマンドの実行方法
実行するときは、ウィンドウズコマンドの前に、cmdwin を付けます。下リストのようにpingの結果の文字化けがなくなりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ cmdwin ping google.com google.com [172.217.25.78]に ping を送信しています 32 バイトのデータ: 172.217.25.78 からの応答: バイト数 =32 時間 =5ms TTL=56 172.217.25.78 からの応答: バイト数 =32 時間 =5ms TTL=56 172.217.25.78 からの応答: バイト数 =32 時間 =5ms TTL=56 172.217.25.78 からの応答: バイト数 =32 時間 =5ms TTL=56 172.217.25.78 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 5ms、最大 = 5ms、平均 = 5ms |
alias(エイリアス=別名)登録による自動化
alias設定による自動化の例を挙げます。
下リストのように、~/.bashrc に alias を作っておけば、ping と実行するだけで、cmdwin ping が実行されます。
1 2 3 4 5 6 7 8 9 10 11 12 |
user@cf-nx2 MINGW64 /c/data/tk/vagrant/centos7/test/link (master) $ cat ~/.bashrc function cmdwin() { CMND=$1 shift $CMND $* 2>&1 | iconv -f cp932 -t utf-8 } alias ping='cmdwin ping' alias a='alias' alias la='ls -aF' alias l='ls -alF' alias s='source ~/.bashrc' |
変更後は、sourceコマンドをお忘れなく。
まとめ
この記事では、文字コードを変換する関数を.bashrcに書くことにより、Git Bashからウィンドウズコマンドを文字化けせずに実行する方法を紹介しました。
Git Bashはとっても便利ですので、Git を使わないとしても、Git Bashを使うためだけに、Git for Windows を使うのもおすすめです。
Git for Windowsのインストール方法は、記事「WindowsにGitをインストールする手順」に紹介しています。
コメント