LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 757|回复: 6

关于abs的一句:不会执行到这里的疑问

[复制链接]
发表于 2009-2-18 17:04:19 | 显示全部楼层 |阅读模式
1 #!/bin/rm
   2 # 删除自身的脚本.
   3
   4 # 当你运行这个脚本时,除了这个脚本消失了之外,你不会发现更多其他的东西。
   5
   6 WHATEVER=65
   7
   8 echo "This line will never print (betcha!)."
   9
  10 exit $WHATEVER  # 不要紧,脚本绝不会运行到这儿.


为什么第10行的注释上写道不会执行到那里呢???求科普。谢谢!!!
发表于 2009-2-18 17:17:07 | 显示全部楼层
我不太懂这个,但我想的是,已经exit了,为什么还会执行后面的内容?是不是?
回复 支持 反对

使用道具 举报

发表于 2009-2-18 17:18:02 | 显示全部楼层
不对,错了,人家这是删除自己的脚本,所以一个/bin/rm就已经把自己删掉了。

你换成/bin/bash或者/bin/sh就不会这样了。

晕。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-18 17:40:36 | 显示全部楼层
谢谢兄弟提醒啊。我用/bin/bash测试了一下,发现退出状态为空(echo #?和echo $status的结果都为空)
回复 支持 反对

使用道具 举报

发表于 2009-2-19 10:30:25 | 显示全部楼层
Post by yzhkpli;1949277
谢谢兄弟提醒啊。我用/bin/bash测试了一下,发现退出状态为空(echo #?和echo $status的结果都为空)


兄弟,我这不懂脚本的都看到那个/bin/rm了,那一行是对脚本解析器的声明。

如果你脚本里面写一堆正常的东西,把那行却改成了fdisk或者format 也一样恐怖。
回复 支持 反对

使用道具 举报

发表于 2009-2-19 10:43:47 | 显示全部楼层
未必,除非fdisk或者format接受一个文件名作为参数,或者该文件名就是对它们有效的参数,否则最多打印非法选项的错误而已。

楼主的问题实在很简单,无非是exec族6个syscall(实际上只有1个是syscall,其它5个是lib func)看到所要执行的文本文件的shebang行,怎么替换成实际执行的命令而已。

是故我一直坚信,即便是纯粹的Unix用户,最好也阅读一遍APUE、AUP或者USP三本著作之一,受益匪浅!
回复 支持 反对

使用道具 举报

发表于 2009-2-19 12:34:04 | 显示全部楼层
Post by Jockey;1949538
未必,除非fdisk或者format接受一个文件名作为参数,或者该文件名就是对它们有效的参数,否则最多打印非法选项的错误而已。

楼主的问题实在很简单,无非是exec族6个syscall(实际上只有1个是syscall,其它5个是lib func)看到所要执行的文本文件的shebang行,怎么替换成实际执行的命令而已。

是故我一直坚信,即便是纯粹的Unix用户,最好也阅读一遍APUE、AUP或者USP三本著作之一,受益匪浅!


版主说得对。。。。支持一个。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表