Tengo una aplicación ejecutada por gnome en mi carpeta de inicio. Ahora agregué la aplicación para que se ejecute cuando presiono Meta+ R(la agregué enCCSM). Ejecuto la aplicación ejecutándola ./gnome-run
en mi carpeta de inicio.
No puedo encontrar ningún rastro del proceso de solicitud en el resultado de ps -A
.
El problema es que si tengo abierto el programa gnome-run y presiono la combinación de teclas quiero que se cierre la aplicación. ¿Hay alguna manera de crear un archivo bash que verifique si las aplicaciones se están ejecutando? Si es así, ciérrelo; de lo contrario, ejecútelo.
Respuesta1
Este script de shell debe manejar el inicio y la detención de cualquier programa:
#!/bin/bash
BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
echo "at least one instance of "$BASECMD" found, killing all instances"
kill $PID
else
echo "no running instances of "$BASECMD" found, starting one"
$1
fi
digamos que lo guardó en ~/mystarter
, puede ejecutar cualquier comando usando ~/mystarter <name>
, por ejemplo, en su caso, vincular Meta+ Ra:
~/mystarter gnome-run
y asegúrese de que el script sea ejecutable: chmod u+x ~/mystarter
. Además, probablemente sea mejor colocarlo en algún lugar de su archivo PATH
, para no tener que escribir su ubicación completa cada vez.
En cuanto al hecho de que gnome-run
eso no aparece en ps -A
, asegúrese de que gnome run no sea un script que inicie el proceso real. Compruebe si hay una diferencia entre ps -A | wc -l
antes y después de iniciarlo (esto cuenta todos los procesos en ejecución).
Editar:
Dado que aceptó la respuesta, pensé en agregar soporte para ejecutar comandos que tienen argumentos de línea de comandos, para que esto pueda convertirse en un lugar de referencia. Ejecute un comando como este:
./mystarter 'cmd args'
p.ej:
./mystarter 'ncmpcpp -c ~/.ncmpcpp'
El comando simplemente mira hacia arriba ncmpcpp
para ver si ya se está ejecutando, pero ejecuta el comando completo (con argumentos) cuando ncmpcpp
no se está ejecutando.