首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Bash脚本:#!/bin/bash是什么意思?

Bash脚本:#!/bin/bash是什么意思?
EN

Stack Overflow用户
提问于 2012-12-14 11:03:29
回答 3查看 338.4K关注 0票数 140

在bash脚本中,第一行的#!/bin/bash是什么意思?

更新#!/bin/bash#!/bin/sh有区别吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-14 11:04:30

这就是所谓的shebang,它告诉shell在执行脚本时使用哪个程序来解释脚本。

在您的示例中,脚本将由bash外壳解释和运行。

其他一些示例shebangs是:

(来自维基百科)

代码语言:javascript
复制
#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell
#!/bin/csh — Execute the file using csh, the C shell, or a compatible shell
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks
#!/usr/bin/php — Execute the file using the PHP command line interpreter
#!/usr/bin/python -O — Execute using Python with optimizations to code
#!/usr/bin/ruby — Execute using Ruby

另外还有几个我能想到的,比如:

代码语言:javascript
复制
#!/bin/ksh
#!/bin/awk
#!/bin/expect

例如,在使用bash shebang的脚本中,您将使用bash语法编写代码;而在使用expect shebang的脚本中,您将使用expect语法编写代码,依此类推。

对更新部分的响应:

这取决于/bin/sh在您的系统上实际指向的内容。通常它只是一个指向/bin/bash的符号链接。有时可移植脚本是用#!/bin/sh编写的,只是为了表明它是shell脚本,但它使用特定系统上的/bin/sh引用的任何shell (可能指向/bin/bash/bin/ksh/bin/zsh)

票数 179
EN

Stack Overflow用户

发布于 2013-11-09 19:29:51

在bash脚本中,第1行的#!/bin/bash是什么意思?

在Linux系统中,我们有解释UNIX命令的shell。现在在Unix系统中有许多shell。其中有一个叫bash的shell,它是非常非常常见的Linux,并且它有很长的历史。这是Linux中的默认shell。

当您编写脚本( unix命令的集合等)时,您可以选择指定可以使用哪个shell。通常,您可以使用Shebang(是的,这就是它的名称)来指定它应该是哪个shell。

因此,如果您在脚本顶部使用#!/bin/bash,那么您就是在告诉您的系统使用bash作为默认shell。

bash现在进入您的第二个问题:#!//bash和#!/bin/sh ?之间有区别吗?

答案是肯定的。当你告诉#!/bin/bash时,你就是在告诉你的环境/ os使用bash作为命令解释器。这是一个很难编码的东西。

每个系统都有自己的shell,系统将使用它来执行自己的系统脚本。这个系统shell可以根据操作系统的不同而有所不同(大多数时候都是bash。Ubuntu最近使用dash作为默认的系统外壳)。当您指定#!/bin/sh时,系统将使用它的内部系统shell来解释您的shell脚本。

有关详细信息,请访问此link,我已在其中解释了此主题。

希望这将消除你的confusions...good运气。

票数 19
EN

Stack Overflow用户

发布于 2012-12-14 11:21:10

当脚本中的第一个字符是#!时,称为shebang。如果您的文件以#!/path/to/something开头,则标准做法是运行something并将文件的其余部分作为输入传递给该程序。

话虽如此,#!/bin/bash#!/bin/sh甚至#!/bin/zsh之间的区别在于是否使用bash、sh或zsh程序来解释文件的其余部分。传统上,bashsh只是不同的程序。在某些Linux系统上,它们是同一程序的两个副本。在其他Linux系统上,sh是到dash的链接,而在传统的Unix系统(Solaris、Irix等)上,bash通常是一个与sh完全不同的程序。

当然,行的其余部分不必以sh结尾。它也可以是#!/usr/bin/python#!/usr/bin/perl,甚至是#!/usr/local/bin/my_own_scripting_language

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13872048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档