for i in ...
по умолчанию перебирает список лексем, разделенных пробелами, а не список лексем, разделенных новой строкой. И пробел, и новая строка являются символами пробельных символов и поэтому считаются разделителями.
Рассмотрим:
while read line; do
echo $line
done < data.txt
read по умолчанию будет читать до новой строки и сохранять прочитанное в заданной переменной.
Проблема связана с проверкой переменной $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
экземпляры, независимо от того, есть ли они один или много, а если их нет, запустите новый.
Обратите внимание, что я ничего не знаю о том, что такое llpp
PDF-ридер или что он делает.
Упрощенно, вы могли бы изменить логику, чтобы сказать:
Новый код:
pdflatex "$FILE_NAME"
if ! pkill -HUP -f "llpp ${FILE_PATH}/${FILE_NAME}.pdf"; then
llpp "${FILE_PATH}/${FILE_NAME}.pdf" &
fi