TerminalでCygwinを使う

CygwinはTeratermとかPuttyとかから使うと透明化できたり,便利な感じがします.
このポストでは,便利感をより高める2つの方法を説明します.
前提として,TeratermからCygwin起動は既にできているとします.
また,zshなどのインストール方法については省きます.

やること

  • cygwinのシェルをzshにする
  • apt-cygを入れる

デフォルトシェルをzshにする

Cygwinにはchshとかないんで,設定ファイルに直接記述します.
Cygwinをそのまま使ってる場合はCygwin.batを編集するようですが,
Teraterm越しに使っている場合はcygterm.cfgを編集します.

設定ファイルの中身は

[sourcecode language="bash"] # CygTerm setting TERM = ttermpro.exe %s %d /E /KR=SJIS /KT=SJIS /VTICON=CygTerm /nossh TERM_TYPE = vt100 PORT_START = 20000 PORT_RANGE = 40 SHELL = auto ENV_1 = MAKE_MODE=unix ENV_2 = LOGIN_SHELL = Yes # HOME_CHDIR = No SSH_AGENT_PROXY = No [/sourcecode]


こんな感じになっているので,SHELLを

SHELL=/bin/zsh

に書き換えるだけok.
ついでに,cygtermの文字コードをUTFにするためにTERMを

TERM=ttermpro.exe %s %d /E /KR=UTF-8 /KT=UTF-8 /VTICON=CygTerm /nossh

と書き換えましょう
この設定は,teratermの設定 > その他の設定 > Cygwin からでも設定できます.

apt-cyg導入

cygwinにはapt-getとかyumなどのパッケージ管理が用意されておらず
setup.exeを起動してパッケージを追加しなければなりません.
そこで,まるでapt-getを使っているかのような錯覚に陥るapt-cygを導入します(cyg-aptってのもあるらしいですけど).
apt-cygを見ると

% svn --force export http://apt-cyg.googlecode.com/svn/trunk/ /bin/ % chmod +x /bin/apt-cyg

でokなよう. apt-getとの対応としては

apt-cashe serach apt-cyg find
apt-get installapt-cyg installです.

*** fatal error - unable to remapとかいうエラー

cygwinを使っていると,dllのアドレスが衝突してる的なエラーがたまに出ます.
zshを使ってるとよく出るきがします. いろいろメモさんに載っていた方法でうまく解決します.
/bin/rebaseallというスクリプトを使います.(dllを再配置するようです.)
zshでそのまま使うと,from ashとエラーが出るので,一旦cygwinを閉じ,ashを起動します.(Cygwin/bin/ash.exe)
念の為/bin/psでプロセスを確認し,ashとps以外のものがあればkillしてから /bin/rebaseall を実行すればokです.