«Глобально магазин» PID файла, запущенный от сценария Bash

for i in ... по умолчанию перебирает список лексем, разделенных пробелами, а не список лексем, разделенных новой строкой. И пробел, и новая строка являются символами пробельных символов и поэтому считаются разделителями.

Рассмотрим:

while read line; do
    echo $line
done < data.txt

read по умолчанию будет читать до новой строки и сохранять прочитанное в заданной переменной.

0
07.11.2018, 19:41
2 ответа

Проблема связана с проверкой переменной $LLPP_IDбез кавычек. Когда есть два PID, тест расширится до синтаксической ошибки (что-то вроде [ 12334 24433 ]).

Вместо этого используйте тест -nдля проверки не -пустой строки (и всегда заключайте в кавычки любое раскрытие переменной):

if [ -n "$LLPP_ID" ]; then

А вот сpkill:

было бы проще
#!/bin/sh

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

Это наберет ваш документ, отправит HUPво все работающие llppэкземпляры, независимо от того, есть ли они один или много, а если их нет, запустите новый.

Обратите внимание, что я ничего не знаю о том, что такое llppPDF-ридер или что он делает.

2
28.01.2020, 02:18

Упрощенно, вы могли бы изменить логику, чтобы сказать:

  • Есть ли процесс llpp, открытый с этим именем файла?
  • Если это так, HUP это.
  • Если нет, создайте его.

Новый код:

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

Теги

Похожие вопросы