ちょっとしたテクニック集のおさらい

なんとなく知ってはいて便利だとわかっているんだけど、いざ使おうと思うとあれ何だったっけ。と調べもしないでさじを投げてしまうことが多々あります。そんなテクニック集を紹介している記事があがっていたので慣れるためにおさらいです。

odz buffer - shell のちょっとしたテクニック
http://d.hatena.ne.jp/odz/20070129/1170136615

連続実行

処理時間を確認したい時とかにやってる。

% date; foo; date

これも意識せずに「;」でつなげてた。。&&が正しい。

% ./configure && make

これは失敗したらの場合

% foo || bar

失敗したらもう一度実行してエラーログをとるとか?

foo||foo > error.log 2>&1
job control

これ覚えれば一番便利だと思うんだけど、なかなか慣れない。

Ctrl+z 処理の一時停止
jobs 処理の一覧
fg フォアグランドへ
bg バックグラウンドへ

一時停止させといて、フォアグランドに持ってくるときにコマンド追加するのは便利。

% foo
(C-z)
% fg && bar

date入れ忘れた時とか。

% foo
Ctrl+z
% date;fg;date

複数のjobがある場合は、%1とか%2とか順番にjob番号が振られてて指定できるみたい。
場面としては、vi や less 中にちょっとあっちも確認したいとか。

% vi foo
Ctrl+z
% less bar
Ctrl+z
% fg %1
Ctrl+z
% fg %2
Ctrl+z
% fg %1

これなら複数コンソール開くか。

コマンド置換

これはスクリプト書くときに便利。

`command` か $(command) でコマンドの実行結果がコマンドライン中に展開される。

ファイルに日付を入れたい場合とか便利。

% foo > foo-`date +'%Y%m%d'`.log
プロセス置換

初めて知ったのがこれです。

<(command) は command の標準出力をあらわす名前付きパイプのファイル名に置換される。

つまり標準出力をパイプってことかな。こういうことかな。

% grep eth0 <(/sbin/ifconfig)

これと同じのような。

% /sbin/ifconfig |grep eth0

やはり例のようにパイプ2回分の時に役に立つのか

% diff -u <(foo) <(bar)

screen

自分もつい最近までscreen使ってなかったけど、もはやscreenは必須。これは後日で。
screen入ってないマシンで操作するとき、nohupよく忘れるので注意。