「時間」に応じてサブシェルを条件付きで渡す方法は?

「時間」に応じてサブシェルを条件付きで渡す方法は?

個々のステップを測定するために使用する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。 (この部分も具体的であり、通常は他のシェルには必要ありません。)TIMEFORMATbashshoptbash

おすすめ記事