bash cat:无效选项 -- 'r'

bash cat:无效选项 -- 'r'

-r在我们的 RedHat enterprise 7.7 Maipo (???) 服务器上搜索了该命令的所有无效选项cat,但没有成功。

尝试读取包含完整路径的文件名列表,打开 中列出的文件filelist.log,并附加内容将该文件合并为一个大文件。

例如,如果filelist.log有五个文件名及其完整路径的列表:

1st file in the list consists of 10 lines.                                                              
2nd file in list is 4 lines.                                 
3rd file in list is 7 lines                                 
4th file in list is 6 lines.                                        
5th file in list is 3 lines. 

...那么创建的文件将有 30 行。

脚本:

#!/bin/bash

while IFS= read -r line                                   
do echo "$line"  #works fine, echos line-by-line of file name and path to stdout.

cat "$line" >>sourcecode.txt #append CONTENTS of file, (throws invalid option 'r')                               
done < filelist.log

也许这是错误的做法。

其他引发相同无效选项-r错误的尝试:

cat $(grep -v '^#' filelist.log) >sourcecode.txt                      
sed '/^$/d;/^#/d;s/^/cat "/;s/$/";/' filelist.log | sh  > sourcecode.txt    
xargs < filelist.log cat >>sourcecode.txt

过去曾使用 xargs 读取五级文件夹名称的列表,然后在另一台服务器上创建一组相同的文件夹名称,但为空,因此似乎在这里也可以工作。

答案1

在循环过程中,cat遇到以 开头的“$line” -r,则它认为 是命令的一个选项:

cat -rfoo

所以它会抛出错误

cat: invalid option -- 'r'
Try 'cat --help' for more information.

您可以通过告诉命令不接受更多选项来绕过它--

cat -- "$line"

答案2

删除IFS=,在这种情况下您不需要它。

while read -r line; do cat -- "$line" ; done < filelist >> outputfile

会成功的。

相关内容