シェル内蔵機能を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"