/usr/bin/time を呼び出す前にエイリアスを拡張する

/usr/bin/time を呼び出す前にエイリアスを拡張する

シェル内蔵機能をtime使用すると。time/usr/bin/time/usr/bin/time

$ /usr/bin/time ll
/usr/bin/time: cannot run ll: No such file or directory

llエイリアスを渡す前に、エイリアスを拡張するためにシェルをどのように説得できますか/usr/bin/time?構文解析の結果は、alias ll特にエイリアス定義に他のエイリアスが含まれているため、難しいです。


私が使用する理由は/usr/bin/time測定のためです。最大メモリ使用量

答え1

エイリアスは次のように定義できます/usr/bin/time

alias 'ubtime=/usr/bin/time '

または

alias 'ubtime=command time '

time実行可能ファイルのパスをハードコードしたくない場合。

トリックはエイリアス定義の末尾の空白で、エイリアスを後ろに置き換える必要があることをシェルに伝えます。

ubtime ll

実際には次に拡張されます。

/usr/bin/time ls -l

llはいと仮定ls -l)。

それにもかかわらず、スタンドアロン/usr/bin/time実行可能ファイルとしてパイプ、複合コマンド、関数、またはシェルの組み込み時間を測定できないため、任意のエイリアス拡張時間を測定できません。

/usr/bin/timeキー入力出力形式よりもデフォルトの出力形式を好むため、使用する場合はtime多くのシェルでこの形式を変更できます。たとえば、次のようになりますzsh

$ TIMEFMT=$'\e[31;1m%J\e[m: U:%U S:%S (%*E total) [avgtext:%X avgdata:%D maxmem:%M]'
$ time ls -l | head -n1
total 288072444
ls -l: U:0.00s S:0.01s (0.017 total) [avgtext:0 avgdata:0 maxmem:3]
head -n1: U:0.00s S:0.00s (0.015 total) [avgtext:0 avgdata:0 maxmem:3]

\e[31;1mカラー(太い赤)出力の場合)。

答え2

これはbashで動作することができます:

/usr/bin/time  $(alias "ll" | sed "s/^alias [^=]*='\(.*\)'/\1/")

ただし、スペース、エスケープ文字、ネストされたエイリアス、関数などのランダムエイリアスは完全に安全ではありません。

醜くない解決策はないと思います。これがシェルに組み込まれていますtime。エイリアスはシェル関数を使用することもできます。

エイリアスがbashの設定ファイルで定義されていて、時間オーバーヘッドに気を配らない場合は、次のことを試すことができます。

/usr/bin/time bash -l -i -c "ll"

関連情報