-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
会成功的。