なぜBSD evalはgtimeを実行できないのですか?


0

私はこの回答を、私がインストールしたGNU timeで検討していますbrew

data.txt

hello 
amigo
this line 3
and here we go 4
and 5 is here

BSD時間のコード

time eval $(echo sed $(for i in 1 2 3 5; do echo "-e ${i}p"; done) -n data.txt )
hello 
amigo
this line 3
and 5 is her

real    0m0.008s
user    0m0.003s
sys 0m0.005s

GNU時間のコード

$ gtime eval $(echo sed $(for i in 1 2 3 5; do echo "-e ${i}p"; done) -n data.txt )
gtime: cannot run eval: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 1228800maxresident)k
0inputs+0outputs (0major+93minor)pagefaults 0swaps

引用符付き

gtime eval '$(echo gsed $(for i in 1 2 3 5; do echo "-e ${i}p"; done) -n data.txt )'
gtime: cannot run eval: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 1196032maxresident)k
7inputs+0outputs (0major+91minor)pagefaults 0swaps

Matthieuのコメントに基づいて、gtimeは評価ビンを探していますが、組み込みのbashコマンドです。コマンドwhich evalは何も与えません。

GNU timeがevalを実行できないのはなぜですか?


GNU timeがインストールされているMac OSシステムはないのではないかと心配していますが、GNU time呼び出しはLinuxシステムでは正常に動作します(つまり、evalが正しく組み込まれているシェル組み込みの時間を計測できます)。奇妙な。
mjturner

2
問題は、gtime evalがビンを探しているように見えるが、組み込みのbashコマンドであるということです。
マチューリーグラー

@MatthieuRieglerはい、which eval何も与えません。
レオレオポルトヘルツ준영

@Masi何がtype evalあなたに与えますか?シェルは(echo $SHELL)として何と定義されていますか?
mjturner

回答:


2

gtimeシェルによって内部的に定義されたコマンドを実行/時間設定できません。コマンドはexec()システムコールを使用して実行されますが、システムコールは基本的にバイナリ(/ usr / binなど)を持つコマンドについてのみ知っています。組み込みコマンドはシェルバイナリに含まれており、exec()がそれらを実行する方法はありません。

シェルの組み込みコマンドに依存せずにコマンドを実行する方法を見つけるか、シェルの内部timeコマンドを使用する必要があります。1つのオプションは(動作するはずですが、私は今それをテストする手段がありません)内で新しいシェルを実行することですgtime

gtime bash -c 'eval $(echo sed $(for i in 1 2 3 5; do echo "-e ${i}p"; done) -n data.txt)'

新しいシェルを実行するのに必要な時間が含まれているため、タイミングはわずかにずれますが、を実行することで個別に測定できますgtime bash -c ':'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.