10のPlan9小技

10のUNIX小技に反応してみる.Plan9のコマンド群はUNIXに近いが,かなりミニマルなセットなので,使いはじめると,あれもない,これもないってことになる.rcをまともに使いこなしていないので,勉強がてら調べてみる.

1. ディレクトリの作成
mkdir -pは使えるけど,複雑な例の方はどうするのかな?

$ mkdir -p a/{lib,src,doc/{html,pdf,txt}}

配列を使ってこんな感じ?ちょっと苦しい.

% tmp=(html pdf txt); dir=(lib src doc/$tmp); mkdir -p a/$dir

(追記: 2007-03-09) 結合演算子^を使って,配列を繋げばいいのね.

% mkdir -p a/^(lib src doc/^(html pdf txt))

2. tarの解凍先を指定する
tarの引数が違う.perl - Yet Another 10のUNIX小技を真似すると,こんな感じ.

% {cd src && tar cp .} | {cd dest && tar xT}

4. 変数と「"」の組み合わせは慎重に
rcでは,クォーテーションの扱いが違う.「"」でクォートするとパターンマッチングしない.そして,ワイルドカードを展開して得られた結果はリストとして代入される.

% lc tmp/
a   b
% VAR="tmp/*"
% echo $VAR
"tmp/*"
% VAR=tmp/*
% echo $VAR
tmp/a tmp/b
%echo "$VAR"
"tmp/a" "tmp/b"
%echo $VARa

%echo "$VARa"
rc: null list in concatenation
% echo "$(VAR)a"
"tmp/a "tmp/b a"
% echo $(VAR)a
tmp/a tmp/b a

6. コマンドをグループ分けする
rcにサブシェルはあるのかな?
(調査中)

7. xargsをfind以外と組み合わせる
xargsはない.find「以外と」とあるがfindもない...

ちなみに,Plan9ではfindの代わりにduを使うのが一般的みたいなので,find + xargs + grepを実行するには,こんな感じになる.「`{command}」はcommandの出力をリストで返す記法.

% grep -n pattern `{du -a | awk '{print $2}'}