« [linux,rsync]大量のファイルをリモートサーバーの負荷を上げすぎないようにゆるく転送する | メイン | [php]ビーコン用に 1x1 GIF画像を出力する »

[bash]ビルトインコマンド time のリダイレクション

あとで読む

bash(sh)のビルトインコマンド time の出力がどうしてもリダイレクトできなくて困ってた。

たとえば、サービスのバックアップをとるスクリプトの時間を計測して、それを記録したい場合、timeの出力は標準エラー出力にでるので、

% time backup-service.sh 2> log

とやればいいように思えるが、これではうまくいかない。なぜなら

time が bash のビルトインコマンドであるために、backup-service.sh 2> log が先に評価されてしまうのであった。参考: Redirecting output of the bash keyword time

コマンド版の time を使うと、正常にリダイレクトできる

% /usr/bin/time backup-service.sh 2> log

で、結局どうすればよいかというと、{ COMMANDS ; } というコマンドのグルーピングで評価順を変えてやればよい、ということらしい。具体的には

% { time backup-service.sh; } 2> log

とすると期待通り log に time ビルトインコマンドの結果が書き込まれる

おまけ:ビルトインコマンドのヘルプを見るには

ビルトインコマンドは man でマニュアルが見れないので、いつも man bash で bash のマニュアルを開いてから、該当するコマンドの説明を検索していたが、

% help for

など、(これもビルトインコマンドである)help で説明を見られることが判明。。。うー、もっと早く知りたかった。。。

グルーピングコマンドである { } の説明を見たければ、

% help {
{ ... }: { COMMANDS ; }
    Run a set of commands in a group.  This is one way to redirect an
    entire set of commands.

とでてくる。便利。

Trackbacks

Trackback URL:
http://groundwalker.com/mt/gwtb.cgi/422

« [linux,rsync]大量のファイルをリモートサーバーの負荷を上げすぎないようにゆるく転送する | メイン | [php]ビーコン用に 1x1 GIF画像を出力する »

スポンサー

関連ブログ

あわせて読みたい

関連キーワード

Powered by
Movable Type 3.34

連絡先