我运行以下代码,用于连接作为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
我认为您的脚本至少有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
不能将文件cat
放回自身。这就是"输入文件就是输出文件"的意思。因为catted.txt出现在您的cat参数列表中,所以它将尝试对自己进行cat。因此,将catted.txt移到源目录之外的其他位置。