ヒアドキュメントを使用してテキスト ファイルを 1 つのファイルに結合する bundle という名前のスクリプトがあります。バンドル スクリプトを呼び出すときに名前が引数として渡されるファイルは、1 つのファイル (ここでは filebundle という名前) 内に配置されます。このファイルを bash スクリプトとして実行すると、ファイルを個別のファイルにバンドル解除できます。
バンドル スクリプトは次のとおりです。
#! /bin/bash
# bundle: group files into distribution package.
echo "# To unbundle, bash this file."
for i
do
echo "echo $i 1>&2"
echo "cat >$i <<'End of $i'"
cat $i
echo "End of $i"
done
これは、次のように実行すると
$ bash bundle file1.txt file2.txt > filebundle
filebundle という名前の次のファイルが生成されます。
# To unbundle, bash this file.
echo file1.txt 1>&2
cat >file1.txt <<'End of file1.txt'
This is file1.
End of file1.txt
echo file2.txt 1>&2
cat >file2.txt <<'End of file2.txt'
This is file2.
End of file2.txt
私が言ったように、これはファイル1.txtとファイル2.txtの両方をアンバンドルするためにbashすることができます
私の質問は次のとおりです。バンドル スクリプトを書き直して、ファイルバンドル ファイルの結果として、ファイル名を引数として使用してもしなくても実行できるようにし、それに応じて含まれているファイルをアンバンドルできるようにする必要があります。
例えば:
$ bash filebundle file2.txt
file1.txt ではなく、file2.txt のみをアンバンドルします。さらに、引数なしで filebundle をバッシングすると、filebundle 内のすべてのファイルがアンバンドルされます。
渡された引数に従ってファイルをアンバンドルするには、「if...then...else」制御構造を使用する必要があると思いますが、次のようなものを使用することしか考えられません
for i in $@; do
grep "$i" <<'End of $i' | bash
done
filebundle 内の特定のファイルを見つけて、それらをアンバンドルします。それでも、これらをうまく機能するものにまとめることができないようです。
あなたの考えやアドバイスは大歓迎です。