Bash 在文件中的每一行上运行命令

Bash 在文件中的每一行上运行命令,bash,shell,unix,xmlstarlet,Bash,Shell,Unix,Xmlstarlet,我有FramesList.txt,该文件包含5个.xml文件名。没有生成路径,因为列表是由xml ls>FramesList.txt命令创建的 我想对列出的每个.xml文件运行xmlstarlet命令 FramesList.txt FR0391W.xml FR0921S.xml FR0193A.xml FR0192B.xml FR0132E.xml 那看起来怎么样?它是一个循环吗?在读取-r行时 while read -r line do xmlstarlet "$line" done

我有
FramesList.txt
,该文件包含5个
.xml
文件名。没有生成路径,因为列表是由
xml ls>FramesList.txt
命令创建的

我想对列出的每个
.xml
文件运行
xmlstarlet
命令

FramesList.txt
FR0391W.xml
FR0921S.xml
FR0193A.xml
FR0192B.xml
FR0132E.xml
那看起来怎么样?它是一个循环吗?

在读取-r行时
while  read -r line
do

xmlstarlet "$line"

done <FramesList.txt
做 xmlstarlet“$line”
完成您可以使用
xargs

xargs < FramesList.txt -n 1 xmlstartet
#       ^               ^   ^
#       |               |   Command to run
#       |               Max number of arguments (xmlstartet will be called for
#       |               each line in input file)
#       Input file
xargs
我认为大多数XML Starlet命令接受多个文件作为参数,而且由于您的输入列表很小,您也可以编写

xml COMMAND $(<FramesList.txt)

xml命令$(虽然这个问题可能会得到回答,但您应该展示您的研究和您尝试过的内容。现在看来您希望我们解决您的问题。请将您的问题展示给我们,让我们看看您遇到问题的代码,然后我们可以试着帮助您解决具体问题。您还应该阅读。对不起,各位,我甚至不知道是什么命令。)在这里使用..感谢AndrlRC向我展示了xargs。这里的新手都不知道xargs。你通常应该
read-r
,不要以任何特殊方式处理。对于OP的情况,这可能不是问题。还记得引用变量扩展:
xmlstartet“$line”
或者它将进行分词我建议也使用
-r
选项,以防有一天输入文件为空。@andlrc这很有帮助,尽管当我将xmlstarlet输出到.csv时,我丢失了格式。这将使它变成一条长行,而不是断行。相反,我使用了以下命令:
cat FramesList.txt | xargs xmlstarlet-n>FrameInfo.csv
不确定为什么必须有-n,但正是它带来了正确的格式。似乎这个命令将所有参数串在一行上,您需要包含
-L1
,以便每行获得一个命令。