Por que esse script de peixe não roda em um lançador?

3

Eu escrevi o script a seguir, destinado a iniciar um daemon e exibir uma janela do Zenity, em seguida, pare o daemon quando a janela estiver fechada:

#!/usr/bin/fish

if not ps aux | grep [s]erviio > /dev/null
    set -x JAVA "/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java"

    ~/Programs/serviio/bin/serviio.sh &

    zenity --info --text="Serviio is running.\nClick OK to stop." --title="Serviio"

    ~/Programs/serviio/bin/serviio.sh -stop
end

Se eu executar o script a partir de um terminal, ele funciona muito bem. Ele também funciona a partir de um terminal bash, que parece mostrar que o shebang está funcionando como esperado.

No entanto, se eu criar um lançador para apontar para o script e tentar executá-lo, nada acontece. O Serviio não inicia (posso confirmar isso em ps aux ) e nenhuma janela do Zenity é exibida.

Eu tentei descobrir o que é sobre o script que está causando um problema, mas não teve nenhum sucesso.

  • Se eu remover o teste para saber se o Serviio está em execução, o script funciona.
  • Se eu mantiver o cheque, mas fazer o script exibir o conteúdo de $ JAVA em uma janela do Zenity, em vez de lançar o Serviio, ele funcionará.

Em outras palavras, não consigo identificar nenhum elemento no script que impeça sua execução.

Qual poderia ser o problema?

    
por George T 09.04.2016 / 10:15

1 resposta

1

Descobri porque redirecionar a saída do comando ps para um arquivo. Se eu executar o script a partir de um launcher, o grep encontrará o próprio script (que tem "serviio" em seu nome) e, portanto, não executará o código dentro de "if".

Eu o consertei fazendo o que o grep procura mais específico.

A causa principal parece ser que, se o script for executado diretamente de um terminal, ele não aparecerá como um processo, mas se for executado a partir de um ativador, o interpretador (peixe, nesse caso) aparecerá com o script como um parâmetro .

    
por 11.04.2016 / 20:44