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

标签 linux bash shell scripting

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

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

要过滤配置文件的内容(假设只是从标签“#start”到“#end”的示例),我使用 awk,但我无法将输出重定向到 source 命令。

在我的代码下面:

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 或更高版本。

关于linux - 使用 source 将文件的一部分包含在 bash 脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183903/

相关文章:

c - 套接字 recv() 卡在带有 MSG_WAITALL 的大消息上

linux - 无法让我的程序运行 - %GC 计算器

php - 无法使语言环境在 Linux 上工作

regex - 从 bash shell 中的字符串返回数字

linux - 补充模式

linux - sed 将 ">"替换为 "/>"bash

linux - 通过 Vim 保存平面文件向创建新行的文件添加一个不可见的字节

bash - 在 while 循环中等待按键并停止脚本

PHP (cli) 从/dev/tty 读取时吞下一个字节

linux - 使用 Bash 自动终止匹配进程