评估文件中的shell命令

时间:2016-01-26 09:16:52

标签: linux bash shell

我有一个名为foo.txt的文件,内容为:

Fusce porttitor tortor nisl, eu commodo mi mattis eu. Ut sodales, 
nulla in facilisis ultrices, diam ante dapibus mi, at mollis 
arcu ante vitae lectus. Aenean vitae bibendum massa, in varius est. 
`cat baz.txt`
Mauris quis turpis venenatis, ultrices ipsum ac, mollis tellus.

我想要一个可以使用

调用的shell命令
./cmd.sh foo.txt

将每个` - 引用的shell命令替换为评估该命令的结果。如何做到这一点(理想情况下使用Bash)?

作为奖励:我希望这是递归发生的。也就是说,如果我的baz.txt文件包含更多` - 引用的shell命令,我也希望对它们进行评估。

1 个答案:

答案 0 :(得分:0)

尽管@chepner表达了安全方面的担忧,但我发现了以下awk解决方案。它不是递归的,但它会这样做。

awk -F"\"" '
$1=="SHELL " && NF>=2 {
   system($2)
   next
}
{print}' "$@"

该脚本在SHELL "foo"格式的文件中查找行,并将这些行替换为执行"foo"的结果。