LoginSignup
17
17

More than 3 years have passed since last update.

Cygwin/Msys2 で Windows標準の ping や nslookup を使う (nkf を使わないでシフトJISの出力をUTF-8に変換する方法)

Last updated at Posted at 2017-04-22

前提知識

  • Cygwin には ping パッケージがありますが、Cygwin の ping コマンドは Bash Console や Cygwin Terminal を「管理者として実行」していないと使えません(!)。
  • Cygwin Terminal が標準設定で前提としている文字コードは UTF-8 です。この設定のまま、シフトJISを出力するWindows標準コマンドやフリーソフト(コマンドラインで使うもの)等を実行して標準出力や標準エラー出力を確認したいケースは結構多いと思います。Visual Studio のコンパイラや nmake、公式の CMake 等を使う際にも応用できます。
  • iconv は Msys2 でも使えるので、ここで紹介したやり方は Msys2 でも使えます。

スクリーンショットを使って文章は簡単に書くよ!

  • Cygwin.bat(bash.exeを直接使用)を起動した場合には、ping や nslookup は文字化けしない。(bash.exeがOS標準のコンソールウィンドウで実行されているためと思われる)

a.png

  • Cygwin Terminal(mintty.exe経由でbashを使用)を起動した場合は(標準の設定では)文字化けする。(Cygwin Terminal はデフォルトでは UTF-8 の出力を期待しているが、Windows標準の ping や nslookup はシフトJIS(CP932)を出力するため)

b.png

  • ネットで「cygwin ping」等で検索すると「nkf」を使う方法が紹介されていたりするが Cygwin 用の「nkf」標準パッケージはない。(わざわざ「nkf」をソースからコンパイルして解決されてますね!)

  • 実は、Cygwin に標準でインストールされている「iconv」を使って、シフトJISをUTF-8に変換してやれば良い。|でパイプをすると標準エラー出力がリダイレクトされない(「権限のない回答」の部分が化ける)ので、|&で標準出力および標準エラー出力の両方をリダイレクトすると良いことが分かる(下図の通り)。

c.png

最後に、上記変換処理をシェルスクリプトにしてみる。sjis nslookup www.youtube.com のようにコマンドの前に sjis を付けるだけで、シフトJISの出力が(標準出力・標準エラー出力の両方とも)UTF-8に変換される。

  • エディタで sjis というファイルを作成した後、install sjis /usr/local/bin のように installコマンドを使うことで実行権限も自動的に付与されます。(chmod する必要がありません)
  • installコマンドを実行する前にカレントディレクトリで試したい場合は、bash sjis nslookup www.youtube.com のようにしてください。
sjis
#!/bin/bash
$* |& iconv -f cp932 -t utf-8

d.png

以上です。

http://qiita.com/javacommons/items/879efd486313cac8b381 『Cygwinインストール革命 (Mac/Linuxユーザーに朗報。Windows上で tmux(端末多重化ソフト) や vim が使える環境が3分で構築できます!emacs, git や Xサーバーも追加インストール可能)』もよろしければお読みください!

17
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17