¿Por qué BSD eval no puede ejecutar gtime?

0

Estoy considerando esta respuesta con el tiempo GNU que instalé por brew .

data.txt

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

Código en tiempo 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

Código en tiempo 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

y con comillas

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

Basado en el comentario de Matthieu, el gtime está buscando un bin de evaluación pero es un comando bash incorporado. El comando which eval no da nada.

¿Por qué el tiempo GNU no puede ejecutar eval?

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

1 respuesta

2

gtime no puede ejecutar / los comandos de tiempo definidos internamente por el shell. Los comandos se ejecutan utilizando la llamada al sistema exec (), pero la llamada al sistema básicamente solo conoce los comandos con binarios (por ejemplo, en / usr / bin). Los comandos incorporados están incluidos en el binario del shell, no hay forma de que exec () los ejecute.

Necesitas encontrar una forma de ejecutar el comando sin confiar en los shell shell o usar el comando interno time de tu shell. Una opción podría (debería funcionar, pero no tengo medios para probarlo ahora) ejecutar un nuevo shell dentro de gtime

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

El tiempo estará ligeramente apagado porque se incluye el tiempo requerido para ejecutar un nuevo shell, pero se puede medir por separado ejecutando gtime bash -c ':' .

    
respondido por el nohillside 15.07.2015 - 14:43

Lea otras preguntas en las etiquetas