我运行以下代码来连接作为bash中脚本文件的参数给出的目录中的文件
for i in $*
do
cat $* > /home/christy/Documents/filetest/catted.txt
done
这会产生错误
cat: /home/christy/Documents/filetest/catted.txt: input file is output file
答案 0 :(得分:1)
你不能cat
一个文件回归自己。这就是“输入文件是输出文件”的意思。因为catted.txt显示在cat的参数列表中,所以它会尝试捕捉到它自己。因此,将catted.txt移动到源目录以外的其他位置。
答案 1 :(得分:1)
我认为你的剧本至少有4个问题......
首先,您的循环会将i
的值连续设置为每个文件的名称,因此您希望在循环中实际使用i
,如下所示:
for i in $*
cat "$i" ....somewhere
done
其次,如果您使用>
重定向,则每个文件将完全位于前一个的顶部,因此您应该真正使用>>
重定向将当前文件追加到上一个文件的末尾,如下所示
for i in $*
do
cat "$i" >> ...somewhere
done
第三,我认为你应该使用双引号"$@"
来获取所有命令行参数,而不是普通的$*
for i in "$@"
...
第四,使用这个更简单的命令,你可以达到我想要的确切效果:
cat "$@" > /home/christy/Documents/filetest/catted.txt