[英]Linux Bash. Send mailx from inside a while loop that reads lines of a file
在Linux bash腳本中,我嘗試使用mailx發送1封電子郵件給讀取的文件的每一行。 讀取的行包含用於構建電子郵件的參數。 我可以在此循環之外發送相同的電子郵件。 感謝您的任何投入。
#!/bin/bash
in_email_file='./in_file.txt'
email_adr="address@somewhere.com"
while IFS='|' read -r subject body email
do
#these are echoed
echo "$subject"
echo "$body"
echo "$email"
#this does not get sent
echo "$body" | mailx -s "$subject" -r $email_adr $email
done < $in_email_file
#this gets sent
echo "Email body sent from outside loop" | mailx -s "Email subject sent from
outside loop" -r $email_adr $email_adr
正在讀取的輸入文件如下所示:
subject1|body1|address@domain.com
subject2|body2|address@domain.com
subject3|body3|address@domain.com
您沒有共享要在循環內運行的確切代碼,但是不管我懷疑這是bash腳本發生常見 (令人沮喪)絆腳石的情況。 您可能正在嘗試在read
循環內做一些有趣的事情(即:陷阱的秘訣)。
tl; dr這是在read
s中避免read
s的方法:
mapfile -t lines < "$in_email_file" # affectively one of the reads
for line in "${lines}";do #now no read occurs here
IFS=\| read subject body email < <(echo "$line")
# ... mailx thing you're doing
done
總結一下:使用內置的mapfile
以便您可以編寫一個普通的for
循環。 閱讀該陷阱頁面,以有趣的方式了解bash循環可能破壞您的大腦的各種方式。
*編輯 :
grep
呼叫,因為它似乎表明您只是在用它來照顧? 但是,如果要grep,只需將其傳遞給mapfile
: mapfile -t lines < <(grep someExpression "$in_email_file")
help mapfile
更多
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.