分页: 1 / 1
请教一个帖子的问题
发表于 : 2012-03-10 11:00
由 Jr.z
源地址:
http://www.linuxsir.org/bbs/showthread. ... adid=98437
第五楼
我不明白为什么要两次用sed:
sed -e '1,/BIGIN SELFEXTR/d' $0 |sed -e '1,/BIGIN SELFEXTR/d' > /tmp/self/test.tar.gz
Re: 请教一个帖子的问题
发表于 : 2012-03-10 11:42
由 wjchen
帖子地址不完整……

Re: 请教一个帖子的问题
发表于 : 2012-03-10 11:48
由 Jr.z
wjchen 写了:帖子地址不完整……

感谢提醒,这次可以了
Re: 请教一个帖子的问题
发表于 : 2012-03-10 12:53
由 wjchen
self.bin由两部分组成:
代码: 全选
#!/bin/bash
[ -d /tmp/self ]|| mkdir -p /tmp/self
sed -e '1,/BIGIN SELFEXTR/d' $0 |sed -e '1,/BIGIN SELFEXTR/d' > /tmp/self/test.tar.gz
( cd /tmp/self ;
tar xvfz test.tar.gz;
. exsample1
)
exit 0
#BIGIN SELFEXTR
exsam.tar.gz的内容(一些两进制乱码)
第一次sed删除self.bin中的1~3行的内容(因为第三行包含BIGIN SELFEXTR),第二次sed删除4~9行的内容,剩下的就是exsam.tar.gz的内容,再重定向到/tmp/self/test.tar.gz
Re: 请教一个帖子的问题
发表于 : 2012-03-10 13:19
由 Jr.z
wjchen 写了:self.bin由两部分组成:
代码: 全选
#!/bin/bash
[ -d /tmp/self ]|| mkdir -p /tmp/self
sed -e '1,/BIGIN SELFEXTR/d' $0 |sed -e '1,/BIGIN SELFEXTR/d' > /tmp/self/test.tar.gz
( cd /tmp/self ;
tar xvfz test.tar.gz;
. exsample1
)
exit 0
#BIGIN SELFEXTR
exsam.tar.gz的内容(一些两进制乱码)
第一次sed删除self.bin中的1~3行的内容(因为第三行包含BIGIN SELFEXTR),第二次sed删除4~9行的内容,剩下的就是exsam.tar.gz的内容,再重定向到/tmp/self/test.tar.gz
呵呵,谢谢,我忘了sed 里还有BIGIN SELFXTR
Re: 请教一个帖子的问题
发表于 : 2012-03-10 18:31
由 aerofox
其实只用一次也可以,把地址范围改为
代码: 全选
1,/^#BEGIN SELFEXTR/
整个脚本可以改为:
代码: 全选
#!/bin/bash
mkdir -p /tmp/self #有 -p 时,前面的判断可以不要
cd /tmp/self
sed -e '1,/^#BIGIN SELFEXTR/d' $0 | tar xvz
. exsample1
exit 0
#BIGIN SELFEXTR
exsam.tar.gz的内容(一些两进制乱码)
Re: 请教一个帖子的问题
发表于 : 2012-03-10 21:12
由 Jr.z
aerofox 写了:其实只用一次也可以,把地址范围改为
代码: 全选
1,/^#BEGIN SELFEXTR/
整个脚本可以改为:
代码: 全选
#!/bin/bash
mkdir -p /tmp/self #有 -p 时,前面的判断可以不要
cd /tmp/self
sed -e '1,/^#BIGIN SELFEXTR/d' $0 | tar xvz
. exsample1
exit 0
#BIGIN SELFEXTR
exsam.tar.gz的内容(一些两进制乱码)
恩,的确用兄台的方法用一次sed就行了
不过兄台没有自己运行过吧?
你直接通过管道传递给tar的方法是行不通的,用以下代码就知道:
代码: 全选
cat example.tar.gz | tar xvfz
还有,就是兄台没领悟subshell
Re: 请教一个帖子的问题
发表于 : 2012-03-10 21:49
由 aerofox
管道为什么不行,我的tar命令中没有那个 f 噢。
个人感觉在这里没必要用 subshell,所以没用。
Re: 请教一个帖子的问题
发表于 : 2012-03-10 22:59
由 Jr.z
aerofox 写了:管道为什么不行,我的tar命令中没有那个 f 噢。
个人感觉在这里没必要用 subshell,所以没用。

嘿嘿,是我错了,主要是用惯了那个f,随手加了
至于subshell ,单纯从这个脚本来说没必要,但是兄台看看我引用的那个帖子就知道了,原帖子中subshell的必要性
当然,这还是看个人爱好,哈哈
Re: 请教一个帖子的问题
发表于 : 2012-03-11 10:10
由 aerofox
老实说,我没有看出原贴中有必要使用 subshell。
在 subshell 返回后立即执行了 exit 命令,因而靠 subshell 保护当前 shell 的环境不被修改没有什么意义。
Re: 请教一个帖子的问题
发表于 : 2012-03-11 14:21
由 Jr.z
aerofox 写了:老实说,我没有看出原贴中有必要使用 subshell。
在 subshell 返回后立即执行了 exit 命令,因而靠 subshell 保护当前 shell 的环境不被修改没有什么意义。
但是如果发现自己在安装完或者执行完一个命令后发现自己当前目录变了,
而你在原来的目录下还有其他要做的事,然后你自己再cd回去?
Re: 请教一个帖子的问题
发表于 : 2012-03-11 20:49
由 aerofox
你要写的是一个脚本程序(里面实际上打包了数据),用户在执行这个脚本程序时实际上就启动了一个 subshell(除非他非得要用 . 或者 source 命令执行,那是他蛋疼),在这个 subshell 中再怎么改变工作目录,exit 0 时就全没了,恢复到用户 shell 的环境。
Re: 请教一个帖子的问题
发表于 : 2012-03-11 21:47
由 Jr.z
aerofox 写了:你要写的是一个脚本程序(里面实际上打包了数据),用户在执行这个脚本程序时实际上就启动了一个 subshell(除非他非得要用 . 或者 source 命令执行,那是他蛋疼),在这个 subshell 中再怎么改变工作目录,exit 0 时就全没了,恢复到用户 shell 的环境。

实验过了,你又一次赢了
哈哈,受教了