使用$(cat filename.txt)运行脚本

时间:2016-03-30 21:25:38

标签: linux shell sh

所以我正在运行一个名为backup.sh的脚本。它创建一个站点的备份。现在我有一个名为sites.txt的文件,如果我需要备份的站点有一个列表。我不想为我需要备份的每个站点运行脚本。所以我试图做的就是这样:

backup.sh $(cat sites.txt)

但它只备份列表中的第一个站点然后停止。我有什么建议可以让它贯穿整个清单吗?

3 个答案:

答案 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开关)。