‘shell’ カテゴリーのアーカイブ

zshユーザーが普通にtrampを使う方法

久々にEmacsの話題です。trampって便利ですよね。ローカルのEmacsでssh先のファイルを編集したり、sudoしてroot権限で編集できたりするのは素晴らしいと思います。trampの素晴らしさを知らない人は、下記サイトなどを参照してください。

ところで、zshをログインシェルにしているとtrampが上手く動かない現象に出くわします。具体的には、「/sudo::/etc/hosts」などを開こうとして下記のように怒られることがあります。

tramp: Waiting 30s for remote `/bin/sh' to come up...
apply: Couldn't `exec env 'ENV=' 'PS1=$ ' /bin/sh', see buffer `*tramp/sudo *'

この解決方法ですが、.zshrcや.zsh_profileなどに下記のように書けばOKです。

(続きを読む…)

講習会「シェルスクリプト入門」を開催しました

「シェルスクリプト入門」というタイトルで社内勉強会を開催しました。社内でアンケートを取ってみたところ、シェルスクリプトに苦手意識を持っている人がいるようです。「いやいや、普段のコマンドラインと大差ないよ」ということを伝えたくて、簡単な講習をしてみました。これで苦手意識が無くなってくれればいいんですが。

まとめ

  • if文がわかればシェルスクリプトは完璧(?)
    • 条件式の評価には[コマンド(又はtestコマンド)
    • 変数展開はクオーティングに注意
    • 比較するときは”x$hogehoge”を使えば万全
  • exit codeで他のコマンドと連携
    • 0は正常終了、1〜255は異常終了

(続きを読む…)

端末がグチャグチャになったときのためのコマンドjclearを作りました

みなさん、もちろん端末エミュレータは大好きですよね。PuTTYとかTeraTermとか、MacならTerminal.appとかitermとか、生活の5割は端末エミュレータが相手ですよね(残りの5割はエディタが相手でしょう、きっと)。

ところで、たまに端末に変な文字をペーストしたり、何を血迷ったか「cat *」とかしてしまって、端末の画面制御が壊れてしまうことがありませんか?派手に壊れるときと、微妙に壊れるときと差はありますけど、何にせよこのまま作業し続けたらストレスがたまるぞ、という状態になってしまうことがあると思います。

中でも、X11のktermが特に壊れやすい気がします。ちょっと試してみたところ、バッチリ壊れてくれました。

(続きを読む…)

unicode.orgで見つけた文字をUTF-8に変換する方法

タイトルそのままなんですが、まずは私のターミナルを見てください。

ターミナルにU+2620を表示してみたところ

ドクロマークのようなものが表示されています。日頃の行いが悪すぎてターミナルが呪われたようですね!というのは冗談で、unicodeの文字(U+2620)を1文字表示してみたところです。

私の環境はMacOSXとzshですが、zshでは”\xe2″などで任意の1バイトを表現することができます。つまり、IMEから入力できない文字でも、UTF-8表現の3バイトを指定することで任意の文字を表示できます。

unicodeには色々な文字があります。今回はunicode.orgのMiscellaneous Symbolsを見て、U+2620というのが面白い文字だな、ということで見つけてきました。

(続きを読む…)

文字エンコーディングが仲間外れのファイルを素早く見つける方法

プロジェクトに多人数が参加するようになると、なぜかプロジェクトの標準とは異なる文字エンコーディングのファイルがcommitされていることがあります。UTF-8で統一しているはずなのにShift_JISのファイルがある、なんて場合ですね。そこでメンバーの注意力不足を指摘したり、「だから***(自分の使っていないエディタの名前を入れてください)はダメなんだ」とかいう宗教論争に発展させたりというのでは不毛ですよね。簡単に気づく方法があればそれでいいんですよ。

方法は色々あると思いますが、今日はどこのご家庭にも必ずあるnkfを使ってみましょう。最近のnkfには–guessというオプションがあり、文字エンコーディングを推測してくれます。

$ nkf --guess hoge*.txt
hoge1.txt:EUC-JP (LF)
hoge2.txt:UTF-8 (LF)
hoge3.txt:BINARY

これを使えば、変な文字エンコーディングのファイルが隠れていないかどうかすぐにわかります。私はプロジェクトルートディレクトリで以下のようなコマンドを実行しています。

(続きを読む…)

Emacs使いのためのzsh設定

こんにちは、hnwです。今日はEmacsユーザー向けのzshの設定について紹介します。

私はかれこれ8年くらいbashを使っていました。これまでzshユーザーから「zsh便利だよ?zsh使いなよ」と言われて試しに起動してみたことはあるのですが、コマンドライン編集の細かい動きが違うのが気になってすぐbashに戻していました。

zshがbashと何が違うかというと、M-f(カーソルを1単語進める)の挙動です。bashもzshもデフォルトではEmacsライクな動作ということになっていますが、zshはEmacsと微妙に動作が違っているのです。bash(やそれ以前に使っていたtcsh)ではそんな違和感を覚えたことは無いのですが、zshはその点が少しイライラしました。私以外でも、重度にEmacsに毒されている人なら気になって仕方がないんじゃないかと思います。具体的には下図のような挙動の違いがあります。

(続きを読む…)

Subversionでaddremove

たかはらです。

Subversionを使い始めた人からよく聞かれる事があります。

「大量のファイルをsvn addするにはどうするの」

「それはねー」といつも気持ち悪い呪文を教えていたのですが、最近最適解が見つかったので記事にしてみました。

今日も小ネタ&xargsネタです。

(続きを読む…)

最新のファイルを一つxargsに渡す小ネタ

たかはらです。

先日、hnwいまさらxargsの便利さを主張してみるの記事を投稿したところ予想外の大反響でした。xargs好きが意外といると判明したので今日はxargsを利用した小ネタをご紹介します。

例えばネットでソースパッケージを拾ってきてコンパイルする時に、以下のような事をやっていませんか?

  1. ブラウザでファイルをクリックすると保存するか聞かれるので~/Downloadに置く。
  2. ターミナルを開いて、cd ~/Download
  3. tar xvzfと打ったところで
  4. ファイルがたくさんありすぎるのでシェルの補完で探そうとするが数秒前に見たファイル名を覚えだせず焦る。
  5. 舌打ちをしながらブラウザに戻りファイル名を確認する。
  6. 「ああ、そうだったよね」と思いながらシェルに戻ってファイル名を補完する…

そんな貴方に以下のようなスクリプトをご紹介します。

(続きを読む…)

いまさらxargsの便利さを主張してみる

タイトルの通りですが、xargsコマンドの便利さを紹介する記事を書いてみました。xargsは私が大好きなコマンドの一つで、標準入力から渡されたファイル名などを引数とみなして、別のコマンドの引数として起動するというものです。

(続きを読む…)

iTermでCommandキーをMetaキーの意味にするパッチ

タイトルの通りですが、MacOS用のターミナルソフトであるiTermについて、Emacs使い向けのパッチを作りました。私の手元で3週間ほど動いていますので公開します。iTerm 0.9.5に対するパッチですが、CVS上の最新版に対しても適用可能だと思います。

以前の記事「シェルの操作にAltキーを使おう」でも紹介しましたが、私はシェルの操作をするのにEmacs風にMeta(Windows環境なら通常はAlt)キーが使えた方が入力効率が良くなると考えています。特にEmacs使いならエディタでもシェルでも同じキー操作ができますから、慣れるメリットは大きいはずです。

ところで、私は最近メイン環境をMacに移行しました。Macに移行してみての最大の不満は、ターミナルソフトでCommandキーをMetaキーの意味で使えない点です。私はTerminal.AppとiTermの2つしか試していないのですが、少なくともこの2つではCommandキーをMetaキーにすることはできないようです。OptionキーをMetaキーにすることはできるのですが、Optionキーはキー配置的に押しにくく、慣れるのは無理だと感じました。

Carbon EmacsではCommandキーをMetaキーにしていることもあり、何とかターミナルソフトでもCommandキーをMetaキーにしたいと考えていたところ、ドイツのDiedrichさんが同じ意図の(本人によればquickかつdirty hackな)iTermのパッチを作っているのを見つけました。これを更に私なりに改造したパッチを公開します。
iterm-cmdkey-as-meta-patch-20071030.txt」です。機能は下記の通りです。

(続きを読む…)