たとえば、次のように bash ファイルを作成できます。
#!/bin/bash
# file: foo/bar.sh
echo_foo(){
echo "foo"
}
主なファイルがあります:
#!/bin/bash
# file: foo.sh
. foo/bar.sh
echo_foo
実行すると、出力は次のようになります。
$ ./foo.sh
foo
しかし、私が望むのは、インポートを含む圧縮ファイルを持ち、そのfoo.sh
ファイルflat-foo.sh
からfoo.sh
1つを作成することです。
flatten foo.sh > foobar.sh
したがって、foobar.sh
ソースコマンドによって注入されたすべてが含まれ、スタンドアロンデバイスです。
#!/bin/bash
# file: boobar.sh
echo_foo(){
echo "foo"
}
echo_foo
これは、実装またはさらに進む前に以前に解決された問題のようです。 bashファイルを使用してこれを達成する簡単な方法はありますか?
答え1
単純なケースでは、Perlを使用することはそれほど難しくありません。
% perl -pe '$_ = qx/cat $1/ if /^\. (.*)$/;' main.sh
#!/bin/bash
# file: foo.sh
#!/bin/bash
# file: foo/bar.sh
echo_foo(){
echo "foo"
}
echo_foo
たとえば、インデントコマンドをサポートする必要がある場合は、パターンを少し緩和する必要があります.
。持っていません。 1つの可能性は、行のコマンドのみを特別なコメントマークに置き換えることです。. /dev/stdin < ...
. <(whatever)
. "./dir/$scriptname"
.
. somefile.sh # flatten
qx//
(興味深いことに、少なくとも実行されたシェルがデフォルトのスクリプトで使用されているのと同じ場合は、空白のファイル名をサポートしています。)