将一个 shell 脚本文件的内容“合并”到另一个 shell 脚本文件中

将一个 shell 脚本文件的内容“合并”到另一个 shell 脚本文件中

拥有一个包含常量和函数的“库”(lib.sh),我可以将其包含在我的脚本中(script.sh

. /myfolder/lib.sh
......

有没有办法合并脚本中包含的文件(即替换./myfolder/lib.sh为 的内容lib.sh)?

答案1

使用sed

sed -i.bak '\|^\. /myfolder/lib\.sh| {
    r /myfolder/lib.sh
    d
}' script.sh

这个脚本的作用是:

  • \|^\. /myfolder/lib\.sh| { ... }=> 找到以大括号开头的行. /myfolder/lib.sh并执行大括号内的命令
  • r /myfolder/lib.sh=> 输出内容/myfolder/lib.sh
  • d=> 删除行 ( . /myfolder/lib.sh)

当然,其他行保持原样。

答案2

未经测试:使用 GNU awk

gawk -i inplace '
    $1 == "." {system("cat " $2); next}
    {print}
' script.sh

相关内容