簡體   English   中英

對腳本文件的參數中給定目錄中的所有文件運行cat命令,並以名稱作為第二個參數輸出

[英]run cat command for all the files in the directory given in argument of the script file and out put with the name given as second argument

我運行以下代碼來連接目錄中的文件,該目錄作為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

你不能cat文件回到自身上。 那就是“輸入文件就是輸出文件”的意思。 因為catted.txt顯示在您的cat參數列表中,所以它將嘗試使其適應自身。 因此,將catted.txt移動到源目錄以外的其他位置。

我認為您的腳本至少有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM