使用source在bash脚本中包含文件的一部分

时间:2014-03-04 21:53:08

标签: linux bash shell scripting

我有一个bash脚本,需要使用单独文件中包含的一些变量。

通常,为了包含整个文件,我将在主脚本中使用source otherfile.sh。 在这种情况下,我只需要使用此文件的一部分。我不能使用(包括)文件其余部分中包含的其余变量。

要过滤配置文件的内容(比如说从标签“#start”到“#end”),我使用awk,但我无法将输出重定向到soruce命令。

在我的代码下面:

awk ' /'"# start"'/ {flag=1;next} /'"# end"'/{flag=0} flag { print }' config.sh

您知道将此命令的输出重定向到源的任何方法吗?有没有其他方法可以在运行时将输出包含在我的bash脚本中?

顺便说一句,我不想​​创建临时文件(看起来我太脏......)..而且我尝试过在这个网站上找到的东西,但由于某些原因它不起作用。下面是我找到的解决方案。

awk ' /'"# start"'/ {flag=1;next} /'"# end"'/{flag=0} flag { print }' config.sh | source /dev/stdin

谢谢,

卢卡

2 个答案:

答案 0 :(得分:3)

source可以读取bash中的流程替换:

source <( awk ' ... ' config.sh )

sed允许更简单的方法来获取行的子集:

sed -n '/#start/,/#end/p' config.sh

更新:似乎这可能仅适用于bash 4或更高版本。

答案 1 :(得分:2)

今天由朋友提供的正确方法。这是代码:

source /dev/stdin <<EOF
$(awk ' /'"# 10.216.33.133 - start"'/ {flag=1;next} /'"# 10.216.33.133 - end"'/{flag=0} flag { print }' testbed.sh)
EOF

完美的工作......谢谢Andrea! :)(当然每个人都试图回答)