哇!这让我回忆起了很多往事!
在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作为shell,但在Bourne shell中编写脚本,因为它具有更好的语法。
但是,有一个微小的问题:由于您的默认shell是C Shell,在命令行上键入shell脚本名称,C Shell会接收并尝试执行它。
为了解决这个问题,您将:
放在程序的第一行。这是Bourne shell的注释,但是却是无效的C Shell命令。因此,如果您忘记在前面加上sh
,则脚本将无法运行。
后来,系统会知道如果第一行是:
,它应该是一个Bourne shell脚本。甚至更晚一些,您可以放置#:
,以便它成为注释而不是命令。有些人在旁边放置shell的名称/bin/sh
,以帮助提醒人们应该将其作为Bourne shell脚本运行。
我已经很久没有见过以“#: /bin/sh”开头的程序了。
顺便说一句,常见的启动脚本方式如下:
#! /usr/bin/env perl
这样,您就可以使用路径中的Perl版本,而不必担心它在哪个目录中。例如,如果您的脚本以以下方式开始:
#! /usr/local/bin/perl
而且,Perl实际上在/usr/bin
中,因此您的脚本无法运行。 env
程序始终在/usr/bin
中,并保证正常工作。当然,如果您想使用特定版本的Perl而不是路径中的版本,则应使用第一种方法。
env
,我相信。 - Dennis Williamson[text](http://example.com)
形式的链接,而不是 <a href>...
;) - Dennis WilliamsonThis is a comment only...
#:/bin/sh
#!/usr/bin/perl
这段代码与IT技术有关,它将由Perl运行。现在,将'!'替换为':',您将使用默认解释器(即您的shell)运行它。
#!
时可能打错了字。 - Diego Sevilla