luk*_*edj 3 linux bash shell scripting
我有一个 bash 脚本,需要使用包含在单独文件中的一些变量。
通常,为了包含整个文件,我会在主脚本中使用 source otherfile.sh。在这种情况下,我只需要使用此文件的一部分。我不能使用(包括)文件其余部分中包含的其余变量。
为了过滤配置文件的内容(例如从标签“#start”到“#end”),我使用了awk,但我无法将输出重定向到soruce命令。
在我的代码下面:
awk ' /'"# start"'/ {flag=1;next} /'"# end"'/{flag=0} flag { print }' config.sh
Run Code Online (Sandbox Code Playgroud)
你知道有什么方法可以将此命令的输出重定向到源代码吗?有没有其他方法可以在运行时将输出包含在我的 bash 脚本中?
顺便说一句,我不想创建临时文件(看起来我太脏了......)我已经尝试过在这个站点上找到的东西,但由于某些原因它不起作用。下面是我找到的解决方案。
awk ' /'"# start"'/ {flag=1;next} /'"# end"'/{flag=0} flag { print }' config.sh | source /dev/stdin
Run Code Online (Sandbox Code Playgroud)
谢谢,
卢卡
source可以从进程替换中读取bash:
source <( awk ' ... ' config.sh )
Run Code Online (Sandbox Code Playgroud)
sed 允许一种更简单的方法来获取行的子集:
sed -n '/#start/,/#end/p' config.sh
Run Code Online (Sandbox Code Playgroud)
更新:看来这可能只适用于bash4 或更高版本。