個々のステップを測定するために使用するVagrantボックス用の設定スクリプトがありますtime
。ここで、条件付きで時間測定を有効または無効にしたいと思います。
たとえば、前の行は次のようになりました。
time (apt-get update > /tmp/last.log 2>&1)
これで、次のように簡単にできるようです。
MEASURE_TIME=true
[[ $MEASURE_TIME = true ]] && TIME="time --format=%e" || TIME=""
$TIME (apt-get update > /tmp/last.log 2>&1)
しかし、これはうまくいきません。
syntax error near unexpected token `apt-get'
`$TIME (apt-get update > /tmp/last.log 2>&1)'
ここで問題は何ですか?
ベストアンサー1
行く能力がある時間必要なサブシェルtime
キーワード、コマンドではありません。
キーワードはtime
言語の一部であり、文字通り入力してコマンドの最初の単語として入力した場合にのみ認識されます(の場合、ksh93
次のトークンはで始まりません-
)。言うまでもなく、入力も"time"
機能しません(そしてコマンド呼び出し$TIME
として扱われます)。time
ここでは、別の解析ラウンドが実行される前に拡張されるエイリアスを使用できます(したがって、シェルにtime
キーワードを認識させる)。
shopt -s expand_aliases
alias time_or_not=
TIMEFORMAT=%E
MEASURE_TIME=true
[[ $MEASURE_TIME = true ]] && alias time_or_not=time
time_or_not (apt-get update > /tmp/last.log 2>&1)
これtime
キーワードオプションは-p
許可されません(除く)。ただし、書式設定に変数を使用できますbash
。 (この部分も具体的であり、通常は他のシェルには必要ありません。)TIMEFORMAT
bash
shopt
bash