[英]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.