我有一个名为 bundle 的脚本,它使用 Here-documents 将文本文件组合成一个文件。这些文件,其名称在调用捆绑脚本时作为参数传递,被放置在单个文件中(此处命名为 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
正如我所说,它可以被抨击以解开 file1.txt 和 file2.txt
我的问题如下:我必须重写捆绑脚本,以便可以使用或不使用文件名作为参数来执行由此产生的 filebundle 文件,并且可以相应地解开其中包含的文件。
例如:
$ bash filebundle file2.txt
只会解绑 file2.txt 而不是 file1.txt。此外,不带参数抨击 filebundle 将解开 filebundle 中的所有文件。
我假设我应该使用“if...then...else”控制结构根据传递的参数来解包文件,我只能想到使用类似的东西
for i in $@; do
grep "$i" <<'End of $i' | bash
done
在 filebundle 中查找特定文件并解绑它们。然而,我似乎无法将这些组合在一起成为有效的东西。
非常感谢您的想法和建议。