Perché BSal eval non può eseguire il tempo?

0

Sto considerando questo rispondi con il tempo di GNU che ho installato da brew .

data.txt

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

Codice in tempo 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

Codice in tempo 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

e con le virgolette

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

Basato sul commento di Matthieu, gtime sta cercando un cestino di valutazione ma è un comando bash incorporato. Il comando which eval non dà nulla.

Perché il tempo GNU non può eseguire eval?

    
posta Léo Léopold Hertz 준영 06.07.2015 - 10:59
fonte

1 risposta

2

gtime non può eseguire comandi / tempo definiti internamente dalla shell. I comandi vengono eseguiti utilizzando la chiamata di sistema exec (), ma la chiamata di sistema in pratica conosce solo i comandi con i binari (ad es. In / usr / bin). I comandi incorporati sono inclusi nel binario della shell, non c'è modo per exec () per eseguirli.

Devi trovare un modo per eseguire il comando senza fare affidamento sui builtin della shell o usare il comando interno time della tua shell. Un'opzione potrebbe (dovrebbe funzionare, ma non ho i mezzi per testarlo in questo momento) essere per eseguire una nuova shell in gtime

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

Il timing sarà leggermente disattivato perché è incluso il tempo necessario per eseguire una nuova shell, ma puoi misurarlo separatamente eseguendo gtime bash -c ':' .

    
risposta data 15.07.2015 - 14:43
fonte

Leggi altre domande sui tag