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.
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 ejecutarmake stop --just-print
, se obtiene la salida “kill -9 & kill -9 &
“. El comandops | grep
parece funcionar en el makefile, pero la adición deawk 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
.