Zjistil jsem, že volání příkazu mail způsobuje pozastavení skriptu bez chyby. K uzavření skriptu musím ctrl-c nebo zadat příkaz kill na id procesu.
Příslušná část skriptu je níže:
EMAIL_TO="[email protected]"
if [ -f /www/archives/pdf/pdf_201207021048.tar ]; then
echo "file exists"
else
echo "file does not exist"
fi
echo "sending mail next..."
mail -s "pdfbackup" "$EMAIL_TO"
echo "mail sent?"
Když to spustím, vidím text „odesílám poštu příště…“ a nic víc. Nikdy se nevrátí na výzvu.
Vidím, že skript je stále v paměti pomocí ps -ax | grep myscript.sh.
Zkoušel jsem používat uvozovky kolem předmětu a e-mailu a znovu bez. Stejný výsledek je dosažen v obou směrech.
Co dělám špatně?
Přijatá odpověď:
mail
program očekává, že uživatel napíše zprávu na svůj standardní vstup (ukončený EOF (Ctrl-D )). Nepřesměrováváte stdin, program čeká na vstup. Můžete buď přesměrovat z /dev/null
(pro prázdnou zprávu), z předpřipraveného souboru nebo z roury, například:
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
nebo
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
Obojí by mělo problém vyřešit.