Eu tenho um aplicativo executado pelo gnome na minha pasta pessoal. Agora adicionei o aplicativo para ser executado quando pressiono Meta+ R(adicionei-o emCCSM). Eu executo o aplicativo executando ./gnome-run
em minha pasta pessoal.
Não consigo encontrar nenhum vestígio do processo de inscrição na saída do arquivo ps -A
.
O problema é que se eu tiver o programa gnome-run aberto e pressionar a combinação de teclas, quero que o aplicativo feche. Existe uma maneira de criar um arquivo bash que verifique se os aplicativos estão em execução? Se estiver, feche-o, caso contrário, inicie-o.
Responder1
Este script de shell deve lidar com o início e a parada de qualquer 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 você o salvou em ~/mystarter
, você pode executar qualquer comando usando ~/mystarter <name>
, por exemplo, no seu caso, bind Meta+ Rto:
~/mystarter gnome-run
e certifique-se de que o script seja executável: chmod u+x ~/mystarter
. Além disso, provavelmente é melhor colocá-lo em algum lugar do seu arquivo PATH
, para que você não precise digitar o local completo todas as vezes.
Quanto ao fato de gnome-run
não aparecer no ps -A
, certifique-se de que o gnome run em si não seja um script que inicia o processo real. Verifique se há diferença entre ps -A | wc -l
antes e depois de iniciá-lo (isso conta todos os processos em execução).
Editar:
Como você aceitou a resposta, pensei em adicionar suporte para a execução de comandos que possuem argumentos de linha de comando, para que este possa se tornar um local de referência. Execute um comando como este:
./mystarter 'cmd args'
por exemplo:
./mystarter 'ncmpcpp -c ~/.ncmpcpp'
O comando apenas verifica ncmpcpp
se já está em execução, mas executa o comando completo (com argumentos) quando ncmpcpp
não está em execução.