今天有人给我发了一个以#:开头的脚本,在谷歌搜索后,我没有找到任何答案。
即使脚本起作用了,我也想知道这意味着什么。
发布于 2010-11-25 07:09:08
哇!这让我回想起很多回忆!
回到20世纪80年代和90年代初,有两个基本的shell,Bourne shell (/bin/sh)和C shell (/bin/csh)。
Bourne shell几乎没有用户友好的东西。没有别名或命令替换。因此,大多数人喜欢使用C shell作为他们的默认Shell。
然而,Csh是一种糟糕的脚本语言。(参见http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/)。因此,您使用C作为您的shell,但是在Bourne shell中编写脚本,而Bourne shell具有更好的语法。
但是,有一个小问题:因为您的默认shell是C Shell,所以在命令行中键入一个shell脚本名称,C Shell将获取它并尝试执行它。
为了解决这个问题,您可以将:作为程序中的第一行。这是一个Bourne shell注释,但它是一个无效的C Shell命令。因此,如果您忘记将sh放在脚本前面,脚本将无法运行。
稍后,系统将知道第一行是否为:,它应该是一个Bourne shell脚本。而且,即使在以后,您也可以将#:放入其中,这样它就是一个注释而不是一个命令。有些人把外壳的名字,/bin/sh放在它的旁边,以帮助提醒人们应该把它作为一个伯恩外壳脚本运行。
在Kornshell开始流行之后,C shell开始消亡。就在这个时候,shebang (#!)出现了,但这只适用于AT&T,而不适用于伯克利派生的系统。BSD系统直到20世纪80年代末才开始流行起来。而且,在Solaris问世之前,Sun people一直使用C Shell作为默认shell。
我很久没有见过以#: /bin/sh开头的程序了。
顺便说一句,脚本通常是这样启动的:
#! /usr/bin/env perl这样,您就可以使用path中的Perl版本,而不必担心它在哪个目录中。例如,如果您的脚本开头为:
#! /usr/local/bin/perl而且,Perl实际上是在/usr/bin中,您的脚本不会运行。env程序始终在/usr/bin中,并且可以保证正常工作。当然,如果您想使用特定版本的Perl,而不是path中的版本,那么可以使用第一种方法。
发布于 2010-11-25 00:19:22
这只是一条评论...
#:/bin/sh谢邦是#!其他所有以#开头的内容都是注释。
示例:
运行以开头的脚本
#!/usr/bin/perl它将由perl运行。现在,将“!”通过“:”,您将使用默认解释器运行它,这是您的shell。
https://stackoverflow.com/questions/4268845
复制相似问题