I have to write a script to send mails using unix shell scripts.
The following script allows me to have variable message body.
Is it possible to have a variable subject part in the code below?
#!/bin/bash
# Sending mail to remote user
sender="root@sped56.lss.emc.com"
receiver="root@sped56.lss.emc.com"
body="THIS IS THE BODY"
subj="THIS IS THE SUBJECT."
echo $body | mail $receiver -s "THIS IS THE SUBJECT" // this works fine
echo $body | mail $receiver -s $subj // ERROR - sends one mail with only
//"THIS" as subject and generates another error mail for the other three words
You forgot the quotes:
ReplyDeleteecho $body | mail $receiver -s "$subj"
Note that you must use double quotes (otherwise, the variable won't be expanded).
Now the question is: Why double quotes around $subj and not $body or $receiver. The answer is that echo doesn't care about the number of arguments. So if $body expands to several words, echo will just print all of them with a single space in between. Here, the quotes would only matter if you wanted to preserve double spaces.
As for $receiver, this works because it expands only to a single word (no spaces). It would break for mail addresses like John Doe .
you can use mailx and always put your quotes around variables
ReplyDeletemailx -s "$subj" my.email@my.domain.com < myfile.txt