红联Linux门户
Linux帮助

shell自删除脚本

发布时间:2012-04-25 22:41:34来源:红联作者:taog0727
本人接触shell不长时间,正在看《shell编程从入门到精通》(人民邮电出版社)这本书,有一块没有看明白他说的是什么意思?
原文如下:
每个脚本的头都指定了一个不同的命令解释器,为了帮助你打破#!的神秘性,我们可以这样来写一个脚本:
#!/bin/rm
#自删除脚本
#当你运行这个脚本时,基本上什么都不会发生...当然这个文件消失不见了
whatever=65
echo "This line will never print!"
exit $whatever #不要紧,脚本是不会在这退出的

对于上面的代码和注释我完全没有看明白,我在自己机器上执行了上面代码,文件并没有消失,哪位大侠可以帮我解释一下原因呢?多谢多谢~~~
文章评论

共有 9 条评论

  1. xiexz 于 2012-05-11 23:05:08发表:

    [i=s] 本帖最后由 xiexz 于 2012-5-11 23:17 编辑 [/i]

    9# dujingxi


    这很好理解,为什么我们写脚本开头要加#!/bin/bash ?因为#!(即sha-bang)告诉系统这个文件需要一个解释器,而/bin/bash就是这个文件的解释器,所以开头可以是python可以是是/bin/ls可以是/bin/sed,可以是/bin/rm。可能是一个shell, 也可能是一个程序语言, 也可能是一个工具包中的命令程序. 这个解释程序从头开始解释并且执行脚本中的命令(从sha-bang行下边的一行开始),关于#!输入man magic。我们赋予某个脚本文件如test.sh执行的权限那么就可以直接输入test.sh运行不是吗?相当于输入/bin/bash test.sh (sh test.sh) 所以解释器为rm时那样执行就相当于执行/bin/rm test.sh所以当然文件被删除了

  2. dujingxi 于 2012-05-11 21:42:13发表:

    楼主说的我试了一下 ,发现只要执行脚本的环境上写的是/bin/rm,那么不管里面写什么内容都是无效的,而该脚本也会自动消失。往深里研究是什么原因,就应该请教高手了。。

  3. xiexz 于 2012-05-11 12:54:53发表:

    楼主你这本书的作者是谁?我发现这本书的例子似乎用了ABS_GUIDE的例子若不是那本书,那作者那就太无耻了。abs里面举的例子若是他人的,都会注明该例子的引用已经征得作者的同意表示感谢。学bash 看ABS_GUIDE才是王道。里面讲的内容的深度绝对是其他书籍无可比拟的,我看过很多本shell的书了,abs是最好的一本。且初学者完全看的懂
    你google 或baidu一下ABS _guide或者 高级Bash脚本编程指南 就知道了。

  4. personball 于 2012-05-11 11:07:05发表:

    6# likeLx

    变量名的意思已经说明了这个65毫无意义。。

    额,貌似也不能说是变量。。 一般要 set 一下的吧

  5. likeLx 于 2012-05-11 08:42:39发表:

    2# 绿色圣光


    麻烦下能解释下那个65 是怎么回事?

  6. circletiger 于 2012-04-29 21:05:42发表:

    涉及到权限的问题。

  7. taog0727 于 2012-04-28 16:54:06发表:

    2# 绿色圣光

    谢谢!

  8. 1300355 于 2012-04-26 10:06:04发表:

    (5ty( 学习ING

  9. 绿色圣光 于 2012-04-26 08:53:38发表:

    嗯?执行上面的代码?[code]#!/bin/rm
    #自删除脚本
    #当你运行这个脚本时,基本上什么都不会发生...当然这个文件消失不见了
    whatever=65
    echo "This line will never print!"
    exit $whatever #不要紧,脚本是不会在这退出的[/code]你把这段代码写到一个空文件里,比如test.sh。赋予test.sh可执行权限,然后执行它,它就消失了。