Macのターミナルでサーバごとに異なる文字エンコーディングで接続する方法

Macのターミナルでは、[環境設定 > 設定 > 詳細 > 文字エンコーディング]で任意の文字エンコードを指定できます。


が、ターミナル全体でグローバルな1つの設定しかないので、同時に文字コードの異なる複数のサーバに接続するときにイライラすることになります。
ウィンドウとかタブを切り替えるたびに、環境設定をいじるとかありえません。


で、結構イライラがたまってきてたので、cygwinで使ってるcocotみたいなのがないんかな、と探してみたらすぐみつかりました。

cocotとは
端末(tty)とプロセスの間に割り込んで、文字コード変換を行うツール
です.

これは非常に便利です.
MacPortにはあるので

    sudo port install cocot

とすれば,いい.

まだまだEUC-JP環境はありますし,いれておくといいでしょ.
http://newapplesho.blogspot.com/2008/05/cocot.html

Macportsにはいってるそうです。素敵すぎる。



というわけで早速導入してみました。
上記の通りportコマンドを実行してインストールした後、Macのターミナル設定はUTF-8のまま

    mac$ cocot ssh <EUC-JPなサーバアドレス>
 server$ man man

とかやってみると、文字化けせずに表示されました!



なお、以下のようなオプションがあります。-tとか-pを設定すれば違う文字コード環境でも使えます。

$ cocot -h
Usage: cocot [OPTIONS] [--] COMMAND ARG1 ARG2 ...

Options:
    -o LOGFILE     logging all output of command.
    -a             append log file.
    -t TERM_CODE   character code in terminal. (default is UTF-8)
    -p PROC_CODE   character code in command process. (default is EUC-JP)
    -i             ignore ISO-2022-JP escape sequence.
    -n             no conversion. (like script(1))
    -h, --help     show this message.
    -v, --version  show version.


後は、いちいち意識しなくて良いように、

$ cat ~/bin/my_server
#/bin/sh
cocot ssh <ホスト名 or IPアドレス>

上記のようなサーバ接続スクリプトを書いて、実行ビットを立てて、コマンドパス(ここでは~/binを想定)にいれておけば、

$ my_server

と実行するだけで適切な文字コードで接続できます。



更に文字エンコード種別ごとに

$ cat ~/bin/ssh_eucjp
#/bin/sh
cocot -t UTF-8 -p EUC-JP ssh `basename $0`

$ cat ~/bin/ssh_sjis
#/bin/sh
cocot -t UTF-8 -p SJIS ssh `basename $0`

と、ベースのスクリプトを作っておいて、

$ ln -s ~/bin/ssh_eucjp ~/bin/my_server
$ ln -s ~/bin/ssh_sjis ~/bin/your_server
※/etc/hostsなどで、"my_server"という文字列で対象サーバにアクセスできるのであればホスト名のみでOK。
※そうじゃなければ、FQDNを指定しましょう。

などとシンボリックリンクをはっておけば、より快適なターミナル生活を送れるでしょう。



快適すぎる!!