Bash 文件中的多个附件

Bash 文件中的多个附件,bash,mutt,Bash,Mutt,早上好,我想通过mutt发送带有文本文件附件列表的电子邮件 这是我的密码: #!/bin/bash subj=$(cat /home/lazuardi/00000000042/subject.txt) attc=$(find /home/lazuardi/00000000042 -name "*.*" | grep -v body.txt | grep -v email.txt | grep -v subject.txt | grep -v body.html > attachment.t

早上好,我想通过mutt发送带有文本文件附件列表的电子邮件

这是我的密码:

#!/bin/bash
subj=$(cat /home/lazuardi/00000000042/subject.txt)
attc=$(find /home/lazuardi/00000000042 -name "*.*" | grep -v body.txt | grep -v email.txt | grep -v subject.txt | grep -v body.html > attachment.txt)
ls=$(for x in $attc; do read; done)
while read recp; do
    while read ls; do
        mutt -e "set content_type=text/html" $recp -s "$subj" -- $ls < /home/lazuardi/00000000042
    done < /home/lazuardi/attachment.txt
done < /home/lazuardi/00000000042/email.txt 
#/bin/bash
subc=$(cat/home/lazuardi/00000000042/subject.txt)
attc=$(find/home/lazuardi/00000000042-name“****”| grep-v body.txt | grep-v email.txt | grep-v subject.txt | grep-v body.html>attachment.txt)
ls=$(对于$attc中的x;执行读取;执行完毕)
读recp时;做
读ls时;做
mutt-e“set content_type=text/html”$recp-s“$subj”-$ls
我仍然无法在attachment.txt中附加文件 我尝试了FOR循环,结果是一样的。
我该怎么做?

您应该将变量放在引号周围,以防止分词。它会导致单个参数变为两个或多个:

mutt -e "set content_type=text/html" "$recp" -s "$subj" -- "$ls" < /home/lazuardi/00000000042
这里的作业也没有意义:

attc=$(find /home/lazuardi/00000000042 -name "*.*" | grep -v body.txt | grep -v email.txt | grep -v subject.txt | grep -v body.html > attachment.txt)
ls=$(for x in $attc; do read; done)
试试这个:

#!/bin/bash

subj=$(</home/lazuardi/00000000042/subject.txt)

attachments=()
while IFS= read -r file; do
    attachments+=("$file")
done < <(exec find /home/lazuardi/00000000042 -name "*.*" | grep -v -e body.txt -e email.txt -e subject.txt -e body.html)

echo '---- Attachments ----'
printf '%s\n' "${attachments[@]}"
echo

recipients=()
while read recp; do
    recipients+=("$recp")
done < /home/lazuardi/00000000042/email.txt

echo '---- Recipients ----'
printf '%s\n' "${recipients[@]}"
echo

for recp in "${recipients[@]}"; do
    for attachment in "${attachments[@]}"; do
        echo "Sending content to $recp with subject $subj and attachment $attachment."
        mutt -e "set content_type=text/html" "$recp" -s "$subj" -- "$attachment" < /home/lazuardi/00000000042/body.txt
    done
done
#/bin/bash

sub=$(对
attc
的赋值没有任何作用,因为您正在将输出重定向到一个文件。对
ls
的赋值也很奇怪(如果
$attc
实际包含任何内容,则会挂起stdin的输入)。那么我应该如何编写呢?我尝试在没有ls的情况下只使用了1次(而读取recp;do)但是它有相同的结果。
attc
应该包含什么?ls
应该包含什么?为什么要将目录作为标准输入提供给mutt?您是在尝试发送一封电子邮件还是多封电子邮件?您在这个脚本的任何地方都没有使用
-a
参数作为附件。您不应该这样做吗?在attc中我想,我可以使用附件的contain作为变量,用ls变量读取变量。我想发送多封电子邮件,其中包含来自文件的列表收件人、来自文件的主题和来自文件的附件列表。我应该在代码中的哪里更正?是一组平行列表需要合并在每个文件中的一行?还是您需要将所有主题发送到每个附件的所有电子邮件地址?
#!/bin/bash

subj=$(</home/lazuardi/00000000042/subject.txt)

attachments=()
while IFS= read -r file; do
    attachments+=("$file")
done < <(exec find /home/lazuardi/00000000042 -name "*.*" | grep -v -e body.txt -e email.txt -e subject.txt -e body.html)

echo '---- Attachments ----'
printf '%s\n' "${attachments[@]}"
echo

recipients=()
while read recp; do
    recipients+=("$recp")
done < /home/lazuardi/00000000042/email.txt

echo '---- Recipients ----'
printf '%s\n' "${recipients[@]}"
echo

for recp in "${recipients[@]}"; do
    for attachment in "${attachments[@]}"; do
        echo "Sending content to $recp with subject $subj and attachment $attachment."
        mutt -e "set content_type=text/html" "$recp" -s "$subj" -- "$attachment" < /home/lazuardi/00000000042/body.txt
    done
done
#!/bin/bash

subj=$(</home/lazuardi/00000000042/subject.txt)

readarray -t attachments \
    < <(exec find /home/lazuardi/00000000042 -name "*.*" | grep -v -e body.txt -e email.txt -e subject.txt -e body.html)

echo '---- Attachments ----'
printf '%s\n' "${attachments[@]}"
echo

readarray -t recipients < /home/lazuardi/00000000042/email.txt

echo '---- Recipients ----'
printf '%s\n' "${recipients[@]}"
echo

for recp in "${recipients[@]}"; do
    for attachment in "${attachments[@]}"; do
        echo "Sending content to $recp with subject $subj and attachment $attachment."
        mutt -e "set content_type=text/html" "$recp" -s "$subj" -- "$attachment" < /home/lazuardi/00000000042/body.txt
    done
done