あるシェルスクリプトファイルの内容を別のシェルスクリプトファイルに「マージ」

あるシェルスクリプトファイルの内容を別のシェルスクリプトファイルに「マージ」

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

関連情報