Bash の小枝集

Last Modified: Wed Dec 9 23:38:07 JST 2009

コンピュータの使い方を上達させるのに最も早い方法は、「他人の技を盗む」ことです。 UNIX のシェルような複雑なシステムの場合、これはとくにあてはまります。 かくいう新山も、他の人がシェルを使っているのを見て「あ、こんなやり方があるのか」と驚き、 そのたびにいろいろな技を盗用してきました。このように自分がふだんなにげなく使っているものでも、 じつは他人から見ると目から鱗ということがままあるので、ここでは新山の使っている bash の環境と小技 (といえばいえるようなもの) を紹介します。 はっきりいって自信はまったくなく、知ってる人が見れば ひどく頭の悪いこともやっているかもしれませんが、役に立つこともあるかもしれません。

なお、このページのタイトルは「こわざしゅう (小集)」ではなくて、 「こえだしゅう (小集)」ですのでご注意ください。


設定ファイル一式

新山は重要な設定ファイル (.bashrc, .inputrc, .emacs, .fvwm2rc, .screenrc, .lynxrc, .Xresources) をすべて $HOME/rc という ディレクトリに入れています。

.bashrc

5年以上前、まだ tcsh を使っていた時代からずっと修正しつつ使いつづけてきた bashrc ファイル。たまに何度か環境が変わって大幅に改装していますが、いくつかの行は 何年も前からあったもの。環境変数 LESS の設定とかは苦労した。

cdhist.sh

あるとき、複雑なディレクトリ階層をいったりきたりするために pushdpopd そして dirs をおぼえた。 でもこれらはどうにも使いにくい。ちょうどそのころ web ブラウザになれていたので、 ブラウザの back や forward のようにカレントディレクトリを行ったりきたりできるコマンドがほしいと思い、 一念発起して作ったのがこれ。いまだに便利に使っています。これはリング状のディレクトリバッファを 持っており、以下のように使います:

yusuke ~[1]$ . cdhist.sh         (cdhist を起動)
yusuke ~[2]$ cd /tmp             (カレントディレクトリが /tmp に移る)
yusuke /tmp[3]$ cd /usr/bin      (カレントディレクトリが /usr/bin に移る)
yusuke /usr/bin[4]$ -            (ひとつ前に戻る)
yusuke /tmp[5]$ cd /etc          (カレントディレクトリが /etc に移る)
yusuke /etc[6]$ -                (ひとつ前に戻る)
yusuke /tmp[7]$ +                (ひとつ後に進む)
yusuke /etc[8]$ =                (ディレクトリの履歴)
 3 /usr/bin
 2 ~
 1 /tmp
 0 /etc
yusuke /etc[9]$ = 2              (リスト上のディレクトリを直接指定)
yusuke ~[10]$ 

文字コードを変える

Windows環境のマシンと頻繁にファイルをやりとりする場合、 UNIXが伝統的にEUC-JP中心なのに対し、向こうはShift_JISがほとんどなので、 デフォルトの文字コードをEUCからSJISに変更すると便利である。 そのさいに変更する必要のある設定ファイルは:

.bashrc
export LC_CTYPE=ja_JP.SJIS
export JLESSCHARSET=japanese-sjis
.screenrc
defencoding SJIS
.emacs
(prefer-coding-system 'shift_jis)
(set-terminal-coding-system 'shift_jis)
(setq default-buffer-file-coding-system 'shift_jis)
.lynxrc
character_set=Japanese (Shift_JIS)
.Xresources
KTerm*VT100*KanjiMode: sjis
/etc/fstab
//shinyama-pc/shinyama  ... iocharset=cp932 ...

その他の tips

思いだし次第、適宜増やす予定。

alias which='command -v'
新山は bash を使いだす前は tcsh だった。 これは tcsh で which を使いなれてしまっていたので、それを bash でもそのまま使うため。 (でも実はいまでは「h」というただ一文字のコマンド名になっている)

ls -l `which emacs`
実行ファイル emacs の実体をすばやく見るためのもの。Nさんがやってた。

ls -altr
ファイルを日付順にならべて見る。新しいファイルほど下にくるので、 なにか変化があったあやしいディレクトリで実行する。 "-altr" という文字の並びが覚えやすい。2ちゃんねるのどこかのスレで発見。

dd if=/dev/fd0 of=myfloppy.img bs=1024 count=1440 (読み込み)
dd if=myfloppy.img of=/dev/fd0 bs=1024 count=1440 (書き込み)
フロッピーのイメージをファイル myfloppy.img にベタ読み (あるいはファイルからフロッピーにベタ書き) する。むかし Slackware をインストールするときには必須の作業。 Uさんがやってた。

ls .??*
ホームディレクトリの下の "." ではじまるファイルを指定する方法。 単に ".*" とやってしまうと ... も含まれてしまうので失敗する (そしてたいていはひどい目にあう)。Sさんから教えてもらったもの。


Yusuke Shinyama