所以我正在运行一个名为backup.sh的脚本。它创建一个站点的备份。现在我有一个名为sites.txt的文件,如果我需要备份的站点有一个列表。我不想为我需要备份的每个站点运行脚本。所以我试图做的就是这样:
backup.sh $(cat sites.txt)
但它只备份列表中的第一个站点然后停止。我有什么建议可以让它贯穿整个清单吗?
答案 0 :(得分:3)
要遍历文件的行,请使用while
循环和read
命令。
while IFS= read -r file_name; do
backup.sh "$file_name"
done < sites.txt
答案 1 :(得分:1)
正确的解决方法是重构backup.sh
,以便满足您在其命令行上接受网站列表的期望。如果您不允许更改它,您可以编写一个简单的小包装脚本。
#!/bin/sh
for site in "$@"; do
backup.sh "$site"
done
将其保存为backup_sites
,执行chmod +x
,然后使用网站列表运行它。 (我可能会建议xargs -a sites.txt
超过$(cat sites.txt)
,但如果内容是每行一个标记,则两者都应该有用。)
答案 2 :(得分:0)
我认为应该这样做,前提是sites.txt每行有一个站点(未测试):
xargs -L 1 backup.sh < sites.txt
如果您被允许修改backup.sh
,我会对其进行增强,以便它接受网站列表,而不是单个网站。当然,如果sites.txt非常非常大,那么xargs
方式仍然会更好(但是没有-L开关)。