Estou tentando fazer um script que alterne redshift
(um aplicativo de modo noturno). Então, eu fiz isso,
#!/bin/bash
pgrep redshift > /dev/null && \
killall redshift || \
setsid redshift [options] &> /dev/null
Isso procura o programa e se esse programa estiver sendo executado em segundo plano, ele será morto, caso contrário, será iniciado e será setsid
. Agora, esse script funciona se eu quiser matar o processo, mas esse script trava quando eu o executo de volta.
- O que estou fazendo errado?
- Existem outras maneiras de colocar o plano de fundo do processo para que matar o terminal não pare o programa?
Quando você invoca o programa com o bash, o bash interpreta
&>
como um operador de redirecionamento especial (redireciona stdout e stderr), e não como você pretendia: um operador de segundo plano&
e um redirecionamento stdout>
. Separe os dois tokens e você obterá o comportamento em segundo plano que espera:Considere ser mais gentil com seu eu futuro e expanda um pouco a lógica; você quer matar
redshift
se estiver lá, então comece com algumas opções:redshift tem um recurso de alternância
Envie o sinal SIGUSR1 para o processo de redshift para alternar:
Está documentado em seu site , mas não na documentação do software . Eu havia aberto um pull request para documentar esse recurso em sua página de manual.