CUIの世界で暮らす場合、シェルの使いこなしで作業効率は桁違いに変わる。どのシェルを使うかは人それぞれだが、bashを使うことにしてみる・・・と考えていたが、便利そうなのでzshに移行。

link *

メモ *

リソース *

プロセス毎に使えるリソースの大きさの調整・制限(limit)ができる。sh系ではulimitコマンドを使う。

ulimit -a

で現在のlimitがわかる。オプションのみを指定すればunlimitedにできる。具体的な数値を決めたい場合はオプションの後に入れる。以下がオプションの種類。

-cコア
-dデータセグメント
-fファイル
-sスタック
-tCPU時間
-uプロセス数
-v仮想メモリ

リダイレクト *

リダイレクト(UNIXの部屋より)に詳しく記述されていた。

変数の展開 *

変数内に複数の単語がある場合、展開の挙動は他のsh系シェルと異なる。最初はこれを知らずに相当ハマった。

要は、変数内の空白の解釈が「単語の区切り(従来のsh系シェル)」、「空白文字そのもの(zsh)」と異なっているようなのだ。従来のsh系シェルと互換性を持たせた解釈をさせるためには

setopt sh_word_split

とするか、あるいは変数$varを${=var}とする。

$ touch foo
$ touch bar
$ var="foo bar"
$ ls foo
foo
$ ls bar
bar
$ ls foo bar
bar  foo
$ ls "foo bar"
ls: foo bar: No such file or directory
$ ls $var
ls: foo bar: No such file or directory
$ ls ${=var}
bar  foo
$ setopt sh_word_split
$ ls $var
bar  foo
$

機能 *

上記linkをはじめ、各所で紹介されていることを抜粋しているだけです。

ファイル選択 *

setopt extended_glob しとかないとダメなものがあるかも。

例外 *

*.c~main.c

は、「拡張子cのファイル、但しmain.c以外」の意

数字の範囲 *

touch a{0..100}

とすると、a0, a1, ... , a100 なるファイルが作られる。b{000..100}とすると、ちゃんとゼロパディングして b000, b001, ... ,b100 となってくれる。

また、<x-y>は整数xとyの間にマッチする。例えば

ls a<50-60>

などとする。

サブディレクトリの再帰的検索 *

例えば

ls **/*.c

で、カレントディレクトリ以下の拡張子cのファイル全てを列挙できる。

属性 *

pattern('一文字')

などとして属性の区別ができる。

/ディレクトリ
@リンク
x所有者に実行可能(大文字...他人に実行可能)
r所有者に読込可能(大文字...他人に読込可能)
w所有者に書換可能(大文字...他人に書換可能)

つまり

ls -dF *(w)

とすると、カレントディレクトリ中の実行可能ファイルのみ列挙する。

ディレクトリスタック *

使用に必要なオプションについては別な所を参照。

これが有効になっていると、

[~]$ dirs -v
0       ~
1       ~/tmp
2       /opt
[~]$ cd ~2
[/opt]$

などと、今まで行ったディレクトリの履歴をリスト表示し、番号指定したら一発で飛べるようになる。

コマンドラインスタック *

コマンド入力中、M-qとするとそれまでの入力内容が消えたように見える。しかし、新たにコマンドを入力・実行した後にその内容は復活する。長いコマンド入力中の「しまった、あそこのディレクトリの構成知らんからこれ以上入力できん。しかし今までの入力を消すの勿体ない」というシチュエーションの強い味方

コマンドの出力結果 *

=(command) とすると、その部分は「command出力結果の格納した(仮想的な)ファイル」と見做される。また、=command とすると、その部分は"which command"とほぼ同等となる。

echo =cat # --> /bin/cat
vi =(ls) # --> ls の出力結果が編集できる。

例えば・・・

vi =command # バイナリと見せかけて実はスクリプトな実行ファイルをいきなり編集
vi =(ls | sort -r) # 順番を入れ変えたlsの出力をいきなり編集

と、なにかと「いきなり」な事ができる。

.zshrc *

とにかく設定ファイルが全てのカギを握る。

cygwinでのメモ *

bash時代のメモ *

プログラマブル補完 *


Last-modified: Sun, 29 Jan 2006 07:34:23 JST