1

bash を更新したところ、time time更新前に正常に機能していたコマンドを使用できなくなりました。

の考え方time time cmdは次のとおりです。1 つ目timeは bash 組み込み関数、2 つ目time/usr/bin/timeプログラムです。cmd計時するプログラムです。

の使用法はtime time、細かく印刷されたユーザー/システム/リアルタイムとページ フォールト統計の両方を確認するための短くて覚えやすい方法でした。

$ time time false
Command exited with non-zero status 1
0.00user 0.00system 0:00.01elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+163minor)pagefaults 0swaps

real    0m0.035s
user    0m0.000s
sys     0m0.002s

最初の行は cmd の終了ステータス (ゼロ以外の場合)、2 番目は からのコンパクトな時間統計/usr/bin/time、3 番目は/usr/bin/timepagefault 統計による追加情報です。time次に、より詳細なタイミング情報 (ポイントの後の 3 桁) を含むbash の 3 行があります。

質問: なぜ新しい bash は秒timeを /usr/bin/time として無視するのですか? 何が変更され、なぜ変更されたのですか?

古いスタイルの解析時間を返すように bash にパッチを当てるにはどうすればよいですか?

parse.yバイソンファイルであるbashに変更があったと思います。ここで差分http://code.metager.de/source/diff/gnu/bash/parse.y?r2=%2Fgnu%2Fbash%2Fparse.y%40509a4430ae72aec10896713435e84f5b27675763&r1=%2Fgnu%2Fbash%2Fparse.y%4089a92869e56abad08c5c5c5c5

4

1 に答える 1

1

この動作が bash で変更された理由はわかりませんが、少し考えた後、元の状態に戻す方法について提案があります。

コメントで提案したように、最も簡単なのはエイリアスを作成することです。

alias time='time /usr/bin/time'

ただし、これにより、毎回「2倍の時間」を使用するように動作が変更されます。2回指定したいのではないかと思い始めました。もちろん、エイリアスの名前を に変更することもできますtimetime。それでもまだ十分でない場合は、起動スクリプトに関数とエイリアスを追加することで、以前の動作に戻すことができます。

mytime() {
    if [ "$1" = "time" ]; then
        shift
        time /usr/bin/time $@
    else
        time $@
    fi
}
alias time=mytime

少なくとも私のコンピューターでは、これで問題なく動作します。

于 2013-10-10T16:32:14.220 に答える