解压 initrd 的脚本,允许编辑 preseed.cfg 并将其再次打包到 cpio 和 gzip

解压 initrd 的脚本,允许编辑 preseed.cfg 并将其再次打包到 cpio 和 gzip

我想编写一个脚本来实现标题中所说的内容。所以基本上我会压缩 initrd,然后解压 cpio,打开 vi 进行编辑,保存,用 cpio 打包,然后再次 gzip,所以这里没什么花哨的(至少我希望如此,我不擅长 shell 脚本编写)。现在,在对存档进行枪压缩后,结尾的 .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

相关内容