You are overwriting the file.
echo moo >output.lst
echo bar >output.lst
Now, output.lst only contains bar.
The trick is to append, instead of overwrite.
echo moo >output.lst
echo bar >> output.lst
Your script has multiple additional problems, so it is not really clear what you actually want it to do. I'm guessing something like this.
sql things >output.lst
for var in things; do stuff; done | sed 's/ *$//' >>output.lst
... which coincidentally could also be done with a single redirection if you wanted to, by running the commands in a subshell, and redirecting output from the subshell:
( sql things
for var in things; do stuff; done | sed 's/ *$//' ) >output.lst
With these speculations, your entire script could be
#!/bin/bash
# source $HOME/.bash_profile ######## XXX probably don't do this
output=/home/cron/output.lst
sqlplus -s user/test@DB <<EOF >$output # Capture output from SQL
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 red blue green; do
pmcmd getworkflowdetails -sv REPOSITORY "$name"
done |
grep -e "Workflow:" -e "Workflow run status:" -e "End time:" |
# XXX: could benefit from refactoring grep x | sed y to just sed '/x/!d;y'
sed -e 's/ *$//' >> $output
# XXX: fixed Useless Use of cat Award
mail -s "Output - `date '+%d-%m-%y'`" [email protected] <$output
Even the permanent output file could be avoided if you like; just pipe to mail.
#!/bin/bash
( 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 red blue green; do
pmcmd getworkflowdetails -sv REPOSITORY "$name"
done |
sed -e '/Workflow:\|Workflow run status:\|End time:/!d' -e 's/ *$//' ) |
mail -s "Output - `date '+%d-%m-%y'`" [email protected]
(... assuming your sed understands \| to mean alternation in a regex).
cdinto the directory, and making the script depend on the invoking user's.bash_profileis usually not a good idea at all. And as ever,cat file | mailis better expressedmail <file.output_temp.lstand you are not capturing the output from eithersqlplusorpmcmd.