Just another Ruby porter,


3月上旬の日記 | RDF

2015-03-06 (Fri)

stderrをfilterしたい #シェル芸

最近timeコマンドの-f "%E %C"を多用してる。
実行時間とコマンドラインを表示してくれるので便利だが、
ワイルドカードを使うとひどいときは何行も表示されてうっとうしい。
そこでcutでも使って適当に100文字ぐらいに切り詰めようかと思ったら、
stderrに表示されてるので困った。2>&1したら意味がないし。
で、bashを使ってたので以下の方法を思いついた。
とりあえず20文字で切ってみる。日本語は考えない。

$ /usr/bin/time -f "%E %C" ls 12345678901234567890
ls: cannot access 12345678901234567890: No such file or directory
Command exited with non-zero status 2
0:00.00 ls 12345678901234567890
$ /usr/bin/time -f "%E %C" ls 12345678901234567890 2> >(cut -c-20 >&2)
ls: cannot access 12
Command exited with 
0:00.00 ls 123456789

だめだめである。そりゃ他にもstderrに出してるのもいるわけで当然ではある。
要するに最後の行だけ処理すればいいわけで、となるとsedなら簡単だ。

$ /usr/bin/time -f "%E %C" ls 12345678901234567890 2> >(sed '$s/\(.\{20\}\).*/\1 .../' >&2)
ls: cannot access 12345678901234567890: No such file or directory
Command exited with non-zero status 2
0:00.00 ls 123456789 ...

ついでに省略した部分は...で表わすことにした。あとはfunctionなりスクリプトにするなり。


2015-03-05 (Thu)

Google ChromeがlinkをhoverしてもURLを表示してくれない

なんかいつの間にそんな挙動になっていて不便極まりない。
ぐぐってみるとどういうわけか設定で
[システム]-[ハードウェア アクセラレーションが使用可能な場合は使用する]
をチェックすると起こるらしい。確かに最近これ何気なくチェックした記憶がある。
まさか、こんな設定が関係するとは。


2015-03-04 (Wed)

pipefail

pipeを使うと最後に実行したコマンドの終了ステータスが$?にセットされるが、
bashだとset -o pipefailで失敗した値が設定される。

% bash -c 'false | true; echo $?'                    
0
% bash -c 'set -o pipefail; false | true; echo $?'
1

1年前に知りたかった。


2015-03-03 (Tue)

laspipe

shの落とし穴としてreadをパイプで受け取ると別プロセスになるので参照できないってのがあるが、
bashだとshopt -s lastpipeで回避できるようだ。

% bash -c 'echo foo|read a;echo $a' 

% bash -c 'shopt -s lastpipe;echo foo|read a;echo $a'
foo
<()技を使わなくてもよくなるのはわかりやすい。

2015-03-02 (Mon)

足つぼインソール

会社で履いてるサンダルに足つぼインソールを入れたら結構快適。
ただサンダルなのでどんどん後ろにずれる。
なにかいい滑り止めはないかと思ったら、でかめ輪ゴムがいい感じだ。
本の付録を挟むときに使われてるくらいの大きさ。
これをインソールの下に入れると摩擦がいい感じになってずれなくなる。
ただそうは言っても徐々にあちこち移動するので、
いつのまにか輪ゴムがはみ出ることも。


3月上旬の日記 | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!