我以前做过Bash脚本,没有#它们都运行得很好!/bin/bash。
放进去有什么意义?事情会有什么不同吗?
还有,#怎么发音?我知道!发音为“bang”。
#!明显吗?
我以前做过Bash脚本,没有#它们都运行得很好!/bin/bash。
放进去有什么意义?事情会有什么不同吗?
还有,#怎么发音?我知道!发音为“bang”。
#!明显吗?
当前回答
shebang是一个指令,指示加载器使用#!当您试图执行该文件时,作为该文件的解释器。因此,如果你试图运行一个名为foo。sh的文件,它有#!/bin/bash在顶部,实际运行的命令是/bin/bash foo.sh。这是一种为不同程序使用不同解释器的灵活方式。这是在系统级实现的,用户级API是shebang约定。
还值得知道的是,shebang是一个神奇的数字——一个人类可读的数字,它将文件标识为给定解释器的脚本。
您所说的即使没有shebang它也能“工作”的观点只是因为所讨论的程序是为与您正在使用的shell相同的shell编写的shell脚本。例如,您可以编写一个javascript文件,然后放入#!/usr/bin/js(或类似的东西)有一个javascript“Shell脚本”。
其他回答
shebang是一个指令,指示加载器使用#!当您试图执行该文件时,作为该文件的解释器。因此,如果你试图运行一个名为foo。sh的文件,它有#!/bin/bash在顶部,实际运行的命令是/bin/bash foo.sh。这是一种为不同程序使用不同解释器的灵活方式。这是在系统级实现的,用户级API是shebang约定。
还值得知道的是,shebang是一个神奇的数字——一个人类可读的数字,它将文件标识为给定解释器的脚本。
您所说的即使没有shebang它也能“工作”的观点只是因为所讨论的程序是为与您正在使用的shell相同的shell编写的shell脚本。例如,您可以编写一个javascript文件,然后放入#!/usr/bin/js(或类似的东西)有一个javascript“Shell脚本”。
这叫shebang。在unix语言中,#被称为sharp(就像在音乐中)或hash(就像twitter上的标签),而!叫做bang。(实际上,您可以使用!!,叫bang-bang)。所以当组合在一起时,你会得到haSH-BANG,或shebang。
#!告诉Unix使用什么程序来运行它。如果它没有指定,它将尝试使用bash(或sh,或zsh,或任何你的$SHELL变量),但如果它在那里,它将使用该程序。另外,#在大多数语言中是注释,因此在后续执行中会忽略该行。
对于使用不同系统而没有现成库的人来说,它可能很有用。如果没有声明,并且脚本中有一些系统不支持的函数,则应该声明#/bin/bash。我以前在工作中遇到过这个问题,现在我只是把它作为一种实践。
它被称为shebang。它由一个数字符号和一个感叹号字符(#!)组成,后面跟着到解释器的完整路径,例如/bin/bash.UNIX和Linux下的所有脚本都使用第一行中指定的解释器执行。
操作系统采用默认shell来运行shell脚本。所以在脚本的开头提到shell path,你是在要求操作系统使用那个特定的shell。它在可移植性方面也很有用。