我希望使用以下bash脚本来简化发送带有固定正文消息的附件
#!/bin/sh
echo "body of message" | mutt -s "subject" -a $(find /path/to/dir -type f -name "*$1*") -- $2 < /dev/null
但是,有时find命令会找到多个文件作为附件。有没有更具互动性的方法?例如,如果它找到文件xyz.pdf和xyz2.pdf,我可以选择一个,然后继续发送文件?
您可以将find
的输出传递给select
命令。它是一个循环,允许您重复地从选项列表中选择一个项目,并使用刚刚选择的值。
select attachment in $(find /path/to/dir -type f -name "*$1*"); do
echo "body of message" | mutt -s "subject" -a "$attachment" -- "$2" < /dev/null
break # To avoid prompting for another file to send
done
这并不理想;如果发现任何名称中有空格的文件,它就会中断。您可以更加小心地构建文件列表(这超出了这个答案的范围),然后调用select
命令。例如:
# Two poorly named files and one terribly named file
possible=("file 1.txt" "file 2.txt" $'filen3.txt')
select attachment in "${possible[@]}"; do
echo "body of message" | ...
break
done
#!/bin/bash
function inter {
typeset file array i=0
while IFS= read -r -d $' ' file; do
array[i]=$file
((i+=1))
done
if (( i == 0 )); then
echo "no file" >&2
exit 1
fi
if (( i == 1 )); then
echo "$array"
return
fi
select file in "${array[@]}"; do
if (( REPLY>=1 && REPLY<=i )); then
break
fi
done </dev/tty
echo "$file"
}
echo "body of message" | mutt -s "subject" -a "$(find /path/to/dir -type f -name "*$1*" -print0 | inter )" -- $2 < /dev/null