使用源代码,包括在bash脚本文件的一部分(Using source to include part

2019-10-19 12:05发布

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

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

要过滤的配置文件的内容(比方说,就像例如从标签“#开始”到“结束#”)我用awk,但我不能将输出重定向到soruce命令。

下面我的代码:

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

你知道任何方式这条命令的输出重定向到源? 是否有任何其他办法,包括在运行时在我的bash脚本的输出?

顺便说一句,我不希望创建temporaty文件(看来我太肮脏......),我已经试过本网站上的东西,但出于某些原因这是行不通的。 下面有我已经找到了解决方案。

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

谢谢,

卢卡

Answer 1:

source可以从一个过程替代读取bash

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

sed允许一个更简单的方式来获得行的子集:

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

更新:看来,这可能只是在工作bash 4或更高版本。



Answer 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

正常使用...感谢安德烈! :)(当然每个人都试图回答)



文章来源: Using source to include part of a file in a bash script