タイトルに書かれた内容を実行するスクリプトを作成したいと思います。したがって、基本的にinitrdを圧縮し、cpioを解凍し、編集のためにviを開いて保存し、cpioでパッケージ化してから再びgzipを使用するので、これには素晴らしいことはありません(少なくともそれを願っています。私はシェルスクリプトにはうまくいきません) 。アーカイブを合計圧縮した後、末尾の.gzipまたは.gzが省略されるため、$ 1を名前として使用することはできません。追加処理に新しい変数fooを使用できるように、エンディングをどのように削除する必要がありますか?
これは非常にエレガントな方法ではありませんが、効果があることを願っています:)
#/bin/bash
# This script should make it possible to edit the preseed file
# within a initrd gzipped cpio archive, without unpacking and packing it
# manually
mkdir temporarydirectory
# $1 will be the initrd (cpio archive which is compressed with gzip)
mv $1 temporarydirectory
cd temporarydirectory
gunzip $1
cpio -id < $1 # here is where i need to cut of the gzip ending
rm $1 # again without the gzip ending cutted of
vim preseed.cfg
find . | cpio -H newc -o > $1 # again without gzip ending
gzip $1 # here the same
mv $1 .. # here the gzip ending is used again
cd ..
rm -r temporarydirectory
答え1
乱交を見てパラメータ拡張文書。拡張機能をアンインストールするのは非常に一般的で、次の方法で削除できます。
...
file=$1
cpiofile=${file%.*}
...
gunzip $file
cpio -id < $cpiofile
...
(位置パラメータを正しい変数名に変更すると、特にパラメータの順序を追加または変更したい場合は、スクリプトを読みやすく保守しやすくなります。)
答え2
次の行を変更します
gunzip $1
cpio -id < $1
~のため
gzip -dc $1|cpio -id
そして
mv $1 ..
~のため
mv ${1}.gz ../$1