« ネット規制法案に反対します -- 社会の多様性を奪うな -- | メイン | 若者をぼやく年寄りを目指して »

2008年5月 6日 (火)

[技術メモ]: TRAMPとZsh

Emacsで、別のマシンにあるファイルをさもローカルにあるかのように扱うための TRAMPが、いつの頃からかちゃんと動かなくなっていて困っていた。そのうちちゃんと調べて直そう、と思いつつ、この問題を思い出すのは急いで TRAMPを使わないといけない時ばかりだったので先延ばしになっていたのだが、ようやく今日ちゃんと調べて対応してみた。

現象としては、リモートのファイルにアクセスしようとすると、
tramp: Waiting 60s for prompt from remote shell
という表示が出てそこから先に進まない、というものだ。

Emacsの TRAMPのバッファーを見てみると、正常にログインはできていて、プロンプトも返ってきていることが分かった。しかし、上述のメッセージから、これが正しくプロンプトとして認識されていないらしいことが分かる。 TRAMPの infoファイルを見てみると、プロンプトの判断は、 shell-prompt-pattern、 tramp-shell-prompt-patternという変数に設定されている正規表現に基づいているということだ。これらの変数の設定を眺めつつ、実際に返ってきている文字列を見てみると、どうもプロンプトの前にある CR (^M) が問題らしいことが分かった。

まず、 sttyの設定で CR, LFの出力を制御してみることにした。 ocrnl を設定することで、 TRAMPの問題については解決できるようなのだが、これをログインシェルの初期化で行ってしまうと、端末の表示がおかしなことになってしまうようだったので、この方法は断念した。 (もちろん sttyで -onlcrして端末ソフトの設定を変える、なんてことは試してみた。)

さて、ここでちょっと考えてみて思い当たることがあった。この TRAMPの問題は、以前は存在しなかったのだが、いつの頃からか発生するようになった、というのは前述の通りだ。それで、いつからなのかを考えてみたのだが、どうもログインシェルを tcshから Zshに変えた時からかもしれない、という気がしてきた。そこで Zshの infoファイルを調べて、何か問題解決に結びつくような設定がないかざっと見てみたのだが、これというものは見つからなかった。

だとすると、 Zshではなく shが起動されるようにすれば良いのではないかと思い、再度 TRAMPの infoを見てみた。で、分かったことは、接続方法として sshxもしくは scpx (デフォルトは ssh) を設定すると、標準のログインシェルではなく、 /bin/shが使われる、ということだ。

ということで結論は、 tramp-default-method を scpxに設定する、ということだ。実際、これでどうやら解決した模様。

トラックバック

この記事のトラックバックURL: http://www.trashpot.org/mt/mttbxs9Qqx.cgi/203

コメントを投稿

本文以外の項目は、入力していただかなくてもかまいません。また、入力していただいたメールアドレスは表示されません。

(いままで、ここでコメントしたことがない場合や、 TypeKeyの IDでサインインせずにコメントを書き込む場合は、コメントが表示される前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。その場合は、承認されるまでしばらくお待ちください。)

あわせて読みたい

このページについて

2008年5月 6日 13:42に投稿された記事のページです。

前の記事: 「ネット規制法案に反対します -- 社会の多様性を奪うな --
次の記事: 「若者をぼやく年寄りを目指して

この記事は、以下のカテゴリーに投稿されました:
  技術メモ
各カテゴリー名をクリックすると、そのカテゴリーに投稿された他の記事を読むことができます。

 Amazon.co.jpアソシエイト
Powered by
Movable Type