0 votos

¿Por qué BSD eval no puede ejecutar gtime?

Estoy considerando este respuesta con GNU time que instalé por brew .

datos.txt

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

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

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

Basándose en el comentario de Matthieu, el gtime está buscando un bin eval pero es un comando bash incorporado. Comando which eval no da nada.

¿Por qué GNU time no puede ejecutar la evaluación?

2voto

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

Es necesario encontrar una forma de ejecutar el comando sin depender de los buildins de la shell o utilizar la función interna time de su shell. Una opción podría (debería funcionar, pero no tengo medios para probarlo ahora mismo) ser 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 será ligeramente diferente porque se incluye el tiempo necesario para ejecutar un nuevo shell, pero puede medirlo por separado ejecutando gtime bash -c ':' .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X