对脚本文件的参数中给定的目录中的所有文件运行cat命令,并将给定的名称作为第二个参数输出



我运行以下代码,用于连接作为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移到源目录之外的其他位置。

相关内容

  • 没有找到相关文章

最新更新