“Globally Store” PID do arquivo iniciado a partir do script bash

0

Estou compilando um arquivo latex em um script e, em seguida, estou tentando abrir uma nova janela do leitor de pdf ou recarregar a atual (sendo o llpp meu leitor), portanto, depois de compilar meu script,

pdflatex $FILE_NAME
LLPP_ID=$(pgrep llpp)
if [ $LLPP_ID ]
then
kill -HUP $LLPP_ID
else
llpp $FILE_PATH"/"$FILE_NAME".pdf" &
fi

que funciona como planejado, desde que haja apenas uma janela llpp aberta. Eu gostaria de corrigir isso para trabalhar para qualquer número de janelas do llpp abertas.

O ideal seria corrigir o PID do processo do script bash, mas eu entendo que isso não é possível, já que o PID é atribuído pelo kernel.

Eu pensei que poderia usar a variável de ambiente, mas eles permaneceriam disponíveis para subshells, mas eu poderia executar em uma situação onde eu compilar o arquivo, armazenar o PID em uma variável env, fechar o terminal e perder a variável env enquanto as janelas do LLPP permanecem abertas, mas eu não sei mais onde procurar o PID.

Como eu poderia fazer isso?

    
por Three Diag 07.11.2018 / 18:41

2 respostas

2

Simplisticamente, você pode ajustar a lógica para dizer:

  • Existe um processo de llpp que é aberto com este nome de arquivo?
  • Se sim, use o HUP.
  • Se não, crie um.

Novo código:

pdflatex "$FILE_NAME"
if ! pkill -HUP -f "llpp ${FILE_PATH}/${FILE_NAME}.pdf"; then
  llpp "${FILE_PATH}/${FILE_NAME}.pdf" &
fi
    
por 07.11.2018 / 18:50
2

O problema está no teste da variável $LLPP_ID sem aspas. Quando houver dois PIDs, o teste se expandirá para um erro de sintaxe (algo como [ 12334 24433 ] ).

Em vez disso, use o teste -n para testar uma string não vazia (e sempre cite qualquer expansão de variável):

if [ -n "$LLPP_ID" ]; then

Mas seria mais fácil com pkill :

#!/bin/sh

pdflatex "$filename"
if ! pkill -HUP llpp; then
    llpp "$filepath/$filename.pdf" &
fi

Isso formaria o seu documento, envie HUP para qualquer llpp de instâncias em execução, independentemente de haver uma ou várias e, se não houver nenhuma, inicie uma nova.

Note que eu sei nada sobre o que o leitor de PDF llpp é ou faz.

    
por 07.11.2018 / 18:46