为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

30秒到达战场 2019-11-21 10:56:01

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


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


怎么#!发音?


查看完整描述

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。


查看完整回答
反对 回复 2019-11-21
?
慕用2447696

更准确地说,shebang #!是可执行文件(x 模式文件)的前两个字节,由execve(2)系统调用(执行程序)解释。但是POSIX规范execve没有提及shebang。


它必须后跟解释器可执行文件的文件路径(BTW甚至可以是相对的,但大多数情况下是绝对的)。


在用户中找到解释器(例如)的一个不错的技巧(也许不是那么好)是使用程序(始终在所有Linux上),例如python$PATHenv/usr/bin/env


 #!/usr/bin/env python

任何ELF可执行文件都可以是解释器。您甚至可以使用,#!/bin/cat或者#!/bin/true如果您愿意!(但这通常是无用的)


查看完整回答
反对 回复 2019-11-21
?
青春有我

叫做舍邦。在unix-speak中,#称为Sharp(如音乐中的)或hash(如twitter上的标签),而!叫做爆炸。(您实际上可以使用!!来引用以前的shell命令,称为bang-bang)。因此,当放在一起时,您会得到haSH-BANG或shebang。


#之后的部分!告诉Unix使用什么程序来运行它。如果未指定,它将尝试使用bash(或sh,zsh或任何$ SHELL变量),但如果存在,它将使用该程序。另外,#是大多数语言的注释,因此该行在后续执行中将被忽略。


查看完整回答
反对 回复 2019-11-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信