繁体   English   中英

使用源代码将文件的一部分包含在bash脚本中

[英]Using source to include part of a file in a bash script

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

通常,为了包含整个文件,我会在主脚本中使用源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

谢谢,

路卡

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

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

sed提供了一种更简单的方法来获取行的子集:

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

更新:看来这可能仅在bash 4或更高版本中有效。

今天,一个朋友提供了一种正确的方法。 这是代码:

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! :)(当然,每个人都试图回答)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM