为什么需要在脚本文件的开头放置#!/ bin / bash?

我之前已经制作过Bash脚本,并且一开始它们都运行良好。放入它有什么意义?事情会有所不同吗?


另外,您如何发音#?我知道这!发音为“砰”。


怎么#!发音?


30秒到达战场
浏览 1207回答 3
3回答

米脂

这是一个约定,因此* nix shell知道要运行哪种解释器。例如,ATT的较旧版本默认为sh(Bourne shell),而BSD的较旧版本默认为csh(C shell)。即使在今天(大多数系统都运行bash,即“ Bourne Again Shell”),脚本仍可以使用bash,python,perl,ruby,PHP等。例如,您可能会看到#!/bin/perl或#!/bin/perl5。PS:感叹号(!)亲切地称为“ bang”。shell注释符号(#)有时称为“ hash”。PPS:请记住-在* nix下,将后缀与文件类型相关联只是一种约定,而不是“规则”。一个可执行文件可以是一个二进制程序,一百万脚本类型和其他的东西,以及任何一个。因此需要#!/bin/bash。

鸿蒙传说

更准确地说,shebang #!是可执行文件(x 模式文件)的前两个字节,由execve(2)系统调用(执行程序)解释。但是POSIX规范execve没有提及shebang。它必须后跟解释器可执行文件的文件路径(BTW甚至可以是相对的,但大多数情况下是绝对的)。在用户中找到解释器(例如)的一个不错的技巧(也许不是那么好)是使用程序(始终在所有Linux上),例如python$PATHenv/usr/bin/env #!/usr/bin/env python任何ELF可执行文件都可以是解释器。您甚至可以使用,#!/bin/cat或者#!/bin/true如果您愿意!(但这通常是无用的)

青春有我

叫做舍邦。在unix-speak中,#称为Sharp(如音乐中的)或hash(如twitter上的标签),而!叫做爆炸。(您实际上可以使用!!来引用以前的shell命令,称为bang-bang)。因此,当放在一起时,您会得到haSH-BANG或shebang。#之后的部分!告诉Unix使用什么程序来运行它。如果未指定,它将尝试使用bash(或sh,zsh或任何$ SHELL变量),但如果存在,它将使用该程序。另外,#是大多数语言的注释,因此该行在后续执行中将被忽略。
打开App,查看更多内容
随时随地看视频慕课网APP