if [[ unix = unix ]]
then
echo "they are same" > a.txt
else
echo "they are not same" > b.txt
a.txt>>b.txt>c.txt
mail -s "comparison" [email protected] < /home/c.txt
我只是希望邮件正文表明它们相同或不同,但我没有得到预期的输出。
其中一个文件,或者a.txt
或b.txt
被报告为command not found
.
答案1
我不清楚你的脚本的意图是什么,但我将从标题“如何将多个文件附加到单个文件中?”回答你的主要问题......
重定向运算符(>
、>>
、<
等)不能单独作用于文件。它们处理命令的输入和输出。foo > bar
并不意味着“bar
用内容覆盖foo
”。它的意思是“运行命令foo
并用其输出覆盖bar
”。 Andfoo >> bar
表示“运行命令foo
并将其输出附加到当前内容bar
”。另外,你不能链接这些。foo > bar > baz
没有任何意义。
如果你想连接多个文件的内容并将结果附加到另一个文件,那么您需要将>>
运算符与命令结合使用cat
:
cat [OPTION]... [FILE]...
因此,使用您的文件名,将a.txt
和附加b.txt
到c.txt
您可以执行以下操作:
cat a.txt b.txt >> c.txt
由于您在评论中询问了类似的问题,因此这两个命令相当于单行版本:
cat a.txt >> c.txt
cat b.txt >> c.txt
答案2
这可以简化很多:
compare='not '
[[ unix = unix ]] && compare=''
echo "they are ${compare}the same" | mail -s "comparison" [email protected]
这将not
(带有尾随空格)设置为变量的默认值$compare
。如果两个字符串相同,则将 $compare 设置为空字符串。然后打印带有嵌入变量的消息并将其邮寄。