免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12660 | 回复: 14
打印 上一主题 下一主题

请教shell拼接字符串的问题,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-06 17:50 |只看该作者 |倒序浏览
我使用mutt发送邮件并带附件,发现有如下问题,使用脚本自动发邮件,附件的文件名中有空格等特殊字符就会发送失败,但是手工命令直接执行没有问题。
例如:

mutt -s "bbb" -a "/home/mail/test123/新建 测试文件 (2).txt" "/home/mail/test123/测试文件.txt" -- test123@test.com < /root/aaa.txt

直接命令行执行成功 , “bbb”是邮件主题, -a后面是邮件的附件。/root/aaa.txt是邮件正文。

但是我使用脚本就有问题,代码如下:

find  -type f > /tmp/tmplist
flist=""
while read line
do
           flist=$flist" \"$line\"" #不行
           #flist=$flist" "$line    #也不行
           #flist=$flist“ ”’$line‘  #也不行
done < /tmp/tmplist
echo $flist
mutt -s "bbb" -a "$flist" -- test123@run.com < /root/aaa.txt

执行脚本提示错误如下:

无法stat    "/home/mail/chenrui/新建 测试文件 (2).txt"   "/home/mail/chenrui/测试文件.txt" 没有那个文件和目录
   "/home/mail/chenrui/新建 测试文件 (2).txt"   "/home/mail/chenrui/测试文件.txt" 无法附加文件

但是我echo $flist出来的是正常:
"/home/mail/chenrui/新建 测试文件 (2).txt"   "/home/mail/chenrui/测试文件.txt"

出现上述错误,真的很奇怪,$line我使用单引号也不行,"$flist"使用单引号也不行,不适用引号更加错误。

还请大侠指点,是不是我拼接的flist有问题,文件名是英文的,带空格,也是这样的错误。

论坛徽章:
0
2 [报告]
发表于 2011-12-06 17:51 |只看该作者
很是困扰的问题,不知道错在那里。mutt是1.5.21

论坛徽章:
0
3 [报告]
发表于 2011-12-06 17:53 |只看该作者
无论我怎么搞,我感觉mutt好像把$flist整个当成了一个文件来stat判断了。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2011-12-06 18:17 |只看该作者
先不管mutt 的命令用法(这些个命令支持中文名吗?), 你的while loop 很奇怪。是不是想要将每个文件都按照附件发出去? 你的这个脚本只会发最后一个。
  1. find  -type f |while read flist
  2. do
  3.       echo $flist
  4.       mutt -s "bbb" -a "$flist" -- test123@run.com < /root/aaa.txt
  5. done
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-12-06 18:20 |只看该作者
本帖最后由 freecr_cu 于 2011-12-06 18:22 编辑

回楼上的,是的,我就是想先find后,把文件放到临时文件列表/tmp/tmplist,
再挨个读出来,拼接成一个整个字符串$flist放到mutt中去执行。
你的哪个语句会发多封邮件的。我想把目录下的文件以一封邮件发出去

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
6 [报告]
发表于 2011-12-06 18:42 |只看该作者
如果是这样的话,何不先打包成一个tar 或者tar.gz文件,再按附件发出

论坛徽章:
0
7 [报告]
发表于 2011-12-06 18:54 |只看该作者
现在问题是,命令行执行mutt没问题,跑到shell执行就出问题。与中文字符,或者英文无关,只要文件名带了空格,即使只有一个文件,在脚本里面跑,也是这错误,感觉mutt在脚本里面就识别不到变量样子。郁闷ing

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2011-12-07 04:54 |只看该作者
回复 7# freecr_cu
  1. find  -type f > /tmp/tmplist
  2. flist="{"
  3. while read line
  4. do
  5.            flist=$flist"\"$line\","
  6. done < /tmp/tmplist
  7. flist=${flist%,*}"}"
  8. echo $flist
  9. eval mutt -s "bbb" '-a \"$flist'\"' -- test123@run.com < /root/aaa.txt
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-12-07 14:20 |只看该作者
回复 8# yinyuemi

谢谢楼上的回复,但是最后语句有错误,
eval mutt -s "bbb" '-a \"$flist'\"' -- test123@run.com < /root/aaa.txt

问题出在 '-a \"$flist'\"' 这里。不知道楼上的想如何写这个表达式,谢谢

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2011-12-07 14:33 |只看该作者
回复 9# freecr_cu


    你贴下 echo mutt -s "bbb" '-a \"$flist'\"' -- test123@run.com < /root/aaa.txt 看看,
   另外,如果你想attach多个file,应该是mutt -a file1 -a file2 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP