Печать сценария оболочки не работает
Я пытаюсь создать службу печати 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"