es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El comando funciona en la terminal pero no en el archivo makefile.

Este es mi archivo makefile:

start:
emulator -avd Galaxy_Nexus_API_28 -writable-system &
charles &

remount:
adb -s emulator-5554 wait-for-device root
adb -s emulator-5554 wait-for-device shell mount -o rw,remount /
adb -s emulator-5554 wait-for-device shell mount -o rw,remount /sys

stop:
kill -9 $(ps -A | grep qemu-system-x86 | awk '{print $1}') &
kill -9 $(ps -A | grep charles.jar | awk '{print $1}') &

test:
ps -A | grep qemu-system-x86

Iniciar el AVD de Android y Charles funciona bien. Luego, cuando ejecuto make stop --just-print, obtengo esto como resultado:

kill -9 &
kill -9 &

Supongo que esto significa que la salida de $(ps -A | grep qemu-system-x86 | awk '{print $1}') está vacía. Esto es extraño por dos razones:

Primero, porque cuando ejecuto make test obtengo la siguiente salida (correcta):

ps -A | grep qemu-system-x86
64434 pts/0 00:00:59 qemu-system-x86

Segundo, porque al ejecutar echo $(ps -A | grep qemu-system-x86 | awk '{print $1}') en la terminal imprime correctamente el PID del proceso correcto. Entonces, el comando ps | grep funciona en el makefile, pero la adición de awk print solo funciona en la terminal. ¿Cómo puede ser esto? Y ¿cómo lo soluciono?

Por ahora, voy a seguir usando killall -9 java al llamar a make stop, pero esto claramente no es la mejor manera de manejar las cosas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución de problemas makefile con make, grep, pid, kill, ps

    El autor de este makefile está experimentando problemas al detener los procesos especificados en el objetivo stop. Al ejecutar make stop --just-print, se obtiene la salida “kill -9 & kill -9 &“. El comando ps | grep parece funcionar en el makefile, pero la adición de awk print solo funciona en la terminal.

    Posible Solución

    Parece que el comando awk '{print $1}' se está interpretando incorrectamente debido a los caracteres especiales en el makefile. Una posible solución es usar comillas dobles en lugar de comillas simples:

    kill -9 $(ps -A | grep "qemu-system-x86" | awk "{print $1}") &

    Esto debería ayudar al comando awk a interpretar correctamente el parámetro $1.

    Conclusión

    En resumen, la solución al problema es reemplazar las comillas simples por comillas dobles alrededor del comando awk. Esto debería ayudar al comando awk a interpretar correctamente el parámetro $1.

Comments are closed.