Печать сценария оболочки не работает

Я пытаюсь создать службу печати von my raspberry pi. Идея состоит в том, чтобы иметь учетную запись pop3 для заданий на печать, где я могу отправлять файлы PDF и распечатывать их дома. Для этого я настроил fetchmail -> procmail -> uudeview, чтобы собирать электронные письма (используя белый список), извлекать документы и сохранять их в /home/pi/attachments/. До этого момента все работает.

Чтобы распечатать файлы, я хотел установить скрипт оболочки, который планировал выполнять через cronjob каждую минуту. Вот где я застрял, так как я получаю сообщения "в доступе отказано", и сценарий вообще ничего не печатает, пока он работает при выполнении команд вручную.

Вот как выглядит мой скрипт:

#!/bin/bash
fetchmail                 # gets the emails, extracts the PDFs to ~/attachments
wait $!                   # takes some time so I have to wait for it to finish
FILES=/home/pi/attachments/*
for f in $FILES; do       # go through all files in the directory
   if  $f == "*.pdf"      # print them if they're PDFs
   then
      lpr -P ColorLaserJet1525 $f
   fi
   sudo rm $f             # delete the files
done;
sudo rm /var/mail/pi      # delete emails

После выполнения скрипта я получаю следующий отзыв:

1 message for print@MYDOMAIN.TLD at pop3.MYDOMAIN.TLD (32139 octets).
Loaded from /tmp/uudk7XsG: 'Test 2' (Test): Stage2.pdf part 1   Base64
Opened file /tmp/uudk7XsG
procmail: Lock failure on "/var/mail/pi.lock"
reading message print@MYDOMAIN.TLD@SERVER.HOSTER.TLD:1 of 1 (32139 octets) flushed
mail2print.sh: 6: mail2print.sh: /home/pi/attachments/Stage2.pdf: Permission denied

Электронное письмо извлекается из учетной записи pop3, вложение извлекается и на короткое время появляется в ~/attachements/, а затем удаляется. Но нет распечатки.

Есть идеи, что я делаю не так?

2 ответа

Решение
if  $f == "*.pdf"

должно быть

if  [[ $f == *.pdf ]]

Также я думаю

FILES=/home/pi/attachments/*

следует процитировать:

FILES='/home/pi/attachments/*'

Предложение:

#!/bin/bash
fetchmail                      # gets the emails, extracts the PDFs to ~/attachments
wait "$!"                      # takes some time so I have to wait for it to finish
shopt -s nullglob              # don't present pattern if no files are matched
FILES=(/home/pi/attachments/*)
for f in "${FILES[@]}"; do                              # go through all files in the directory
    [[ $f == *.pdf ]] && lpr -P ColorLaserJet1525 "$f"  # print them if they're PDFs
done
sudo rm -- "${FILES[@]}" /var/mail/pi         # delete files and emails at once

Используйте ниже, чтобы сначала отфильтровать pdf-файлы, а затем вы можете удалить этот оператор if внутри цикла for.

FILES="ls /home/pi/attachments/*.pdf" 
Другие вопросы по тегам