Die Ausgabe der SQL-Abfrage und der Befehl um eine Datei in shell-Skript
Habe ich Folgendes shell-script, welches ausgeführt wird eine SQL-Abfrage und einen Befehl sendet die Ausgabe als E-Mail. Das Problem ist ich bin in der Lage, nur senden die SQL-Ausgabe. Nicht die Ausgabe der for-Schleife. Ich habe versucht zu geben, das "EOF" nach der for-Schleife, aber dann gibt es einen syntax-Fehler. Bitte lassen Sie mich wissen, wie Sie sowohl die Ausgabe in eine E-Mail.
Dank & Grüße,
Akhil
#!/bin/bash
source $HOME/.bash_profile
cd /home/cron
wfVAR="red blue green"
echo " " > /home/cron/output.lst
sqlplus -s user/test@DB <<EOF
set linesize 55 pages 500
spool output_temp.lst;
set head off;
select sysdate from dual;
set head on;
spool off;
EOF
for name in ${wfVAR}; do
pmcmd getworkflowdetails -sv REPOSITORY ${name} | grep -e "Workflow:" -e "Workflow run status:" -e "End time:"
done
sed -e 's/*$//' output_temp.lst > output.lst
cat /home/cron/output.lst | mail -s "Output - `date '+%d-%m-%y'`" akhil@gmail.com
rm output_temp.lst
- Als beiseite, es ist selten, müssen
cd
in das Verzeichnis und das script hängt, die dem aufrufenden Benutzer die.bash_profile
ist in der Regel nicht eine gute Idee überhaupt. Und wie immercat file | mail
ist besser ausgedrücktmail <file
. - Sie schaffen nicht
output_temp.lst
und Sie sind nicht die Erfassung der Ausgabe vonsqlplus
oderpmcmd
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du die Datei überschrieben werden soll.
Nun
output.lst
enthält nurbar
.Der trick ist, Anhängen statt überschreiben.
Dein Skript hat mehrere zusätzliche Probleme, so ist es nicht wirklich klar, was Sie wirklich wollen, es zu tun. Ich vermute, so etwas wie dieses.
... die zufälligerweise könnte auch mit einer einzigen Umleitung, wenn Sie wollte, durch das ausführen der Befehle in einer subshell und die Umleitung der Ausgabe von der subshell:
Mit diesen Spekulationen, Ihre gesamte script könnte
Sogar der permanenten Ausgabedatei vermieden werden könnten, wenn Sie wollen, nur Rohr
mail
.(... vorausgesetzt, Ihr
sed
versteht\|
zu bedeuten Wechsel in eine regex).