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}'}