http://www.linuxsir.org/bbs/thread366696.html
原程序如下:
#!/bin/sh
( read l; read l; read l ;exec cat ) < "$0" | gunzip | tar xf - && ls -l
exit
其中:
( read l; read l; read l ;exec cat ) 读取文件的前三行并扔掉,从第四行开始cat输出。
程序将从第四行cat的输出交给gunzip解压,并将gunzip的解压结果继续交由tar解压,最后列解压后的文件。
现将需要的文件打包,然后将该打包文件插入到该shell文件后面(即从第四行后面为打包的文件内容)。
执行该shell程序达到自解压的目的。
两个sh文件,一个针对gzip的一个针对bzip2的。 程序如下:
self_extract_g.sh 文件:
#!/bin/bash
(read l; read l; read l; exec cat) < "$0" | tar -xzvf - && ls -l
exit 0;
self_extract_b.sh 文件:
#!/bin/bash
(read l; read l; read l; exec cat) < "$0" | tar -xjvf - && ls -l
exit 0;
做一次测试:
1、建立data文件夹并创建三个文件test1, test2, test3
2、将test1, test2, test3文件分别打包为,gzip和bzip2
3、将gizp包文件植入self_extract_g.sh, 将bzip2包文件植入self_extract_b.sh
4、最后执行两个自解压程序。
colinux@colinux:~/myshell/data$ ls
test1 test2 test3
colinux@colinux:~/myshell/data$ tar -czvf data.tar.gzip test*
test1
test2
test3
colinux@colinux:~/myshell/data$ tar -cjvf data.tar.bzip2 test*
test1
test2
test3
colinux@colinux:~/myshell/data$ ll
total 20
-rw-r--r-- 1 colinux colinux 178 2010-04-24 22:49 data.tar.bzip2
-rw-r--r-- 1 colinux colinux 177 2010-04-24 22:49 data.tar.gzip
-rw-r--r-- 1 colinux colinux 13 2010-04-24 21:26 test1
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:27 test2
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:26 test3
colinux@colinux:~/myshell/data$ cp ../self_extract_* ./
colinux@colinux:~/myshell/data$ ll
total 28
-rw-r--r-- 1 colinux colinux 178 2010-04-24 22:49 data.tar.bzip2
-rw-r--r-- 1 colinux colinux 177 2010-04-24 22:49 data.tar.gzip
-rw-r--r-- 1 colinux colinux 85 2010-04-24 22:50 self_extract_b.sh
-rw-r--r-- 1 colinux colinux 84 2010-04-24 22:50 self_extract_g.sh
-rw-r--r-- 1 colinux colinux 13 2010-04-24 21:26 test1
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:27 test2
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:26 test3
colinux@colinux:~/myshell/data$ chmod +x self_extract_*
colinux@colinux:~/myshell/data$ ll
total 28
-rw-r--r-- 1 colinux colinux 178 2010-04-24 22:49 data.tar.bzip2
-rw-r--r-- 1 colinux colinux 177 2010-04-24 22:49 data.tar.gzip
-rwxr-xr-x 1 colinux colinux 85 2010-04-24 22:50 self_extract_b.sh
-rwxr-xr-x 1 colinux colinux 84 2010-04-24 22:50 self_extract_g.sh
-rw-r--r-- 1 colinux colinux 13 2010-04-24 21:26 test1
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:27 test2
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:26 test3
colinux@colinux:~/myshell/data$ cat data.tar.bzip2 >> self_extract_b.sh
colinux@colinux:~/myshell/data$ cat data.tar.gzip >> self_extract_g.sh
colinux@colinux:~/myshell/data$ rm test*
colinux@colinux:~/myshell/data$ ll
total 16
-rw-r--r-- 1 colinux colinux 178 2010-04-24 22:49 data.tar.bzip2
-rw-r--r-- 1 colinux colinux 177 2010-04-24 22:49 data.tar.gzip
-rwxr-xr-x 1 colinux colinux 263 2010-04-24 22:51 self_extract_b.sh
-rwxr-xr-x 1 colinux colinux 261 2010-04-24 22:51 self_extract_g.sh
colinux@colinux:~/myshell/data$ ./self_extract_b.sh
test1
test2
test3
colinux@colinux:~/myshell/data$ ll
total 28
-rw-r--r-- 1 colinux colinux 178 2010-04-24 22:49 data.tar.bzip2
-rw-r--r-- 1 colinux colinux 177 2010-04-24 22:49 data.tar.gzip
-rwxr-xr-x 1 colinux colinux 263 2010-04-24 22:51 self_extract_b.sh
-rwxr-xr-x 1 colinux colinux 261 2010-04-24 22:51 self_extract_g.sh
-rw-r--r-- 1 colinux colinux 13 2010-04-24 21:26 test1
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:27 test2
-rw-r--r-- 1 colinux colinux 11 2010-04-24 21:26 test3
分享到:
相关推荐
一个自解压安装包实际上是由一个Shell脚本和压缩文件组合而成。Shell脚本负责读取压缩文件并将其解压到指定目录。具体而言,可以通过`cat`命令将多个文件内容合并,并通过管道(`|`)传递给其他命令处理。 #### 步骤...
文件"照搬.txt"可能是另一个自解压脚本的例子,可能用于克隆或复制某个环境。这种脚本在软件开发和系统部署中特别有用,因为它们可以快速地在多台机器上复制相同的配置。 7. **文件"落雪梨花原版.txt"**: 这个...
自解压程序是一种特殊的RAR或ZIP文件,它包含了一个内置的执行文件,能够无需额外软件就能自动解压缩其内容。然而,有时用户可能会发现,在右键点击这些自解压程序时,会出现“用WinRAR打开”的选项,这可能导致操作...
Apache Ant是一个Java库和命令行工具,主要用于构建Java项目,而Shell脚本则是Unix或Linux系统中用于执行一系列命令的脚本语言。在本场景中,它们结合在一起,为软件部署提供了自动化解决方案。 1. **Apache Ant**:...
在Shell脚本中,你可以编写一系列的命令,这些命令会在一个批处理环境中依次执行,极大地提高了效率和便利性。下面我们将深入探讨一些核心的Shell编程概念。 首先,Shell脚本的开头通常会指定解释器,例如`#!/bin/...
编写Shell脚本意味着将一系列命令组合在一起,形成一个可执行的程序,这样可以节省时间并提高效率。 在飞信方面,飞信是中国移动推出的一种即时通讯软件,早期主要提供PC端服务,用户可以通过它免费发送短信到任意...
首先,"ts"这个脚本名称可能是"test script"的缩写,它是一个用于测试目的的shell脚本,可能包含了各种条件判断、循环控制、文件操作等功能,以验证系统行为或程序功能。在Linux开发中,shell脚本测试是质量保证的一...
本例展示了如何通过VBA宏将一个选定的Zip文件完整地解压到一个新的文件夹中。 1. **获取Zip文件路径**: - 使用`Application.GetOpenFilename`函数选择一个Zip文件。 2. **创建目标文件夹**: - 设置默认路径`...
EFI Shell是UEFI规范的一部分,它是一个独立于操作系统的命令行环境,用户可以通过输入各种命令来操控硬件、执行程序或进行系统级别的调试。这个U盘版EFI SHELL特别适用于系统维护、故障排查、硬件测试和紧急恢复...
标题中的“支持tab键自动补全和字体颜色的ADB shell”指的是一个经过增强的ADB (Android Debug Bridge) 工具,它集成了类似PuTTY的功能,允许用户通过命令行与安卓设备进行交互,并且增加了两个实用特性:Tab键自动...
在本实验中,我们面临的是一个名为"Nachos Lab1"的任务,目标是实现一个基本的Shell。Nachos是一个教学操作系统,它简化了许多操作系统的核心概念,让学生能够在实践中学习。在这个Lab1中,我们将亲手构建一个命令行...
2. **多会话管理**:用户可以同时打开多个终端窗口,每个窗口代表一个不同的远程会话,便于多任务处理。 3. **强大的安全性能**:Xshell支持SSH1、SSH2、Telnet、Rlogin和Serial等安全协议,确保数据传输的加密性,...
本人原创的操作系统上机作业(源代码),自己编写一个简单的Linux下的shell(a simple myshell)!原题见William Stallings写的《Operating Systems - Internals and Design Principles》(操作系统--内核与设计原则...
标题中的“放在U盘根目录就可运行的EFI shell”意味着这个压缩包包含了一个可以在UEFI系统下直接运行的EFI Shell程序。这种便携式的EFI Shell通常被用来进行系统维护、故障排查或者在没有操作系统的情况下执行特定...
Shell脚本是Linux/Unix系统中的一种批处理程序,它允许用户编写一系列命令并将其保存为一个文件。通过运行这个文件,可以执行一系列操作,大大提高了命令行交互的效率。在这个场景中,Shell脚本被用来自动化升级过程...
另一个文件“Github_3.3.3.0”可能是一个特定版本的Git Shell安装程序,版本号3.3.3.0,意味着这是软件的某个更新迭代,可能包含了一些修复和改进。 总的来说,这个压缩包提供了一种在Windows 64位系统上轻松安装和...
例如,如果我们有一个名为`setup.exe`的应用程序需要捆绑在自解压文件中,我们可以使用以下命令: ```shell rar a -r -sfx setup.sfx archive.rar file1 file2 ... ``` 这里,`archive.rar`是包含要打包的文件(如...
【标题】:“Linux下的Cicada:一个使用Rust语言构建的简单Unix Shell” 【描述】:“Cicada是一款用Rust编程语言实现的轻量级Unix Shell,它旨在为用户提供一个基本的命令行交互环境,同时展示了Rust在系统编程...
在描述中提到,为了使用EFI SHELL,你需要将这个压缩包内容解压到一个FAT格式的U盘上。FAT(File Allocation Table)文件系统是一种广泛使用的文件系统,兼容性极强,尤其适合于便携式设备如U盘。将EFI SHELL放入FAT...
1. 创建一个简单的Shell脚本,例如`myscript.sh`,并赋予执行权限:`chmod +x myscript.sh` 2. 使用`shc`进行转换,命令格式为:`shc -f myscript.sh`。这将会生成两个文件:`myscript.sh.c`是转换后的C源代码,`...