本文翻译自:Why do you need to put #!/bin/bash at the beginning of a script file?

I have made Bash scripts before and they all ran fine without this at the beginning. 之前我已经制作了Bash脚本,并且在开始时它们都运行良好。 What's the point of putting it in? 把它放进去有什么意义? Would things be any different? 会有什么不同吗?

Also, how do you pronounce # ? 另外,你怎么发音# I know that ! 我知道! is pronounced as "bang." 发音为“bang”。

How is #! 怎么#! pronounced? 发音?


#1楼

参考:https://stackoom.com/question/bcxa/为什么需要在脚本文件的开头加上-bin-bash


#2楼

It can be useful to someone that uses a different system that does not have that library readily available. 对于使用不具有该库的不同系统的人来说,它可能是有用的。 If that is not declared and you have some functions in your script that are not supported by that system, you should declare #/bin/bash. 如果未声明并且您的脚本中有一些该系统不支持的函数,则应声明#/ bin / bash。 I've ran into this problem before at work and now I just include it as a practice. 我在工作之前遇到过这个问题,现在我只是把它作为一种练习。


#3楼

Also you will see some other parameters after #!/bin/bash, for example 例如,您还会在#!/ bin / bash之后看到一些其他参数
#!/bin/bash -v -x
read this to get more idea. 阅读本文以获得更多想法。
https://unix.stackexchange.com/questions/124272/what-do-the-arguments-v-and-x-mean-to-bash . https://unix.stackexchange.com/questions/124272/what-do-the-arguments-v-and-x-mean-to-bash


#4楼

It's a convention so the *nix shell knows what kind of interpreter to run. 这是一个约定,所以* nix shell知道要运行什么样的解释器。

For example, older flavors of ATT defaulted to sh (the Bourne shell), while older versions of BSD defaulted to csh (the C shell). 例如,较旧版本的ATT默认为sh (Bourne shell),而较旧版本的BSD默认为csh (C shell)。

Even today (where most systems run bash, the "Bourne Again Shell" ), scripts can be in bash, python, perl, ruby, PHP, etc, etc. For example, you might see #!/bin/perl or #!/bin/perl5 . 即使在今天(大多数系统运行bash, “Bourne Again Shell” ),脚本也可以是bash,python,perl,ruby,PHP等等。例如,你可能会看到#!/bin/perl#!/bin/perl5

PS: The exclamation mark ( ! ) is affectionately called "bang" . PS:感叹号( ! )被亲切地称为“爆炸” The shell comment symbol ( # ) is sometimes called "hash" . shell注释符号( # )有时称为“哈希”

PPS: Remember - under *nix, associating a suffix with a file type is merely a convention , not a "rule" . PPS:记住 - 在* nix下,将后缀与文件类型相关联仅仅是一种约定 ,而不是“规则” An executable can be a binary program, any one of a million script types and other things as well. 可执行文件可以是二进制程序,也可以是一百万种脚本类型中的任何一种。 Hence the need for #!/bin/bash . 因此需要#!/bin/bash


#5楼

The operating system takes default shell to run your shell script. 操作系统使用默认shell来运行shell脚本。 so mentioning shell path at the beginning of script, you are asking the OS to use that particular shell. 所以在脚本开头提到shell路径,你要求OS使用那个特定的shell。 It is also useful for portability . 它对于便携性也很有用。


#6楼

Every distribution has a default shell. 每个发行版都有一个默认shell。 Bash is the default on the majority of the systems. Bash是大多数系统的默认设置。 If you happen to work on a system that has a different default shell, then the scripts might not work as intended if they are written specific for Bash. 如果您碰巧在具有不同默认shell的系统上工作,那么如果脚本是针对Bash编写的,则脚本可能无法正常工作。

Bash has evolved over the years taking code from ksh and sh . 多年来,Bash从kshsh获取代码。

Adding #!/bin/bash as the first line of your script, tells the OS to invoke the specified shell to execute the commands that follow in the script. 添加#!/bin/bash作为脚本的第一行,告诉操作系统调用指定的shell来执行脚本中的命令。

#! is often referred to as a "hash-bang", "she-bang" or "sha-bang". 通常被称为“哈希砰”,“嘻嘻”或“沙梆”。

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux31074 人正在系统学习中

[转帖]为什么需要在脚本文件的开头加上#!/ bin / bash?的更多相关文章

  1. linux shell脚本中的开头#!/bin/bash的含义

    对于linux上需要执行 的shell脚本,通常第一行的内容是 #!/bin/bash 当然有很多时候不规范的写法可以忽略掉这一句,执行起来好像也是ok,结果没什么不一样 .. 这只是因为在我们常用 ...

  2. 在caffe中执行脚本文件时 报错:-bash: ./train.sh: Permission denied

    报错原因:没有权限 解决方法:chmod 777 train.sh获得权限

  3. Shell中 调用/引用/包含 另外的脚本文件的两种方法

    脚本 first (测试示例1) #!/bin/bash echo 'your are in first file' 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 s ...

  4. shell脚本--文件包含

    首先介绍一下shell中包含文件的方法,在C,C++,PHP中都是用include来包含文件,Go和Java使用import来包含(导入)包,而在shell中,很简单,只需要一个点“.”,然后跟着文件 ...

  5. tecplot 脚本文件

    一个简单的C++代码,可以生成tecplot的脚本文件,打开文件就能自动绘图.绘图过程是先把文件导入,然后镜像,最后生成一个动画,但是导入的文件名称要求是有规律的. /* ** This progra ...

  6. Maven打包生成可运行bat/sh脚本文件

    利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本,还可以跨平台.   <plugin>      <groupId>org ...

  7. 获取当前正在执行的Javascript脚本文件的路径

    获取当前JavaScript脚本文件的路径,在特定场景下可能需要,比如写模块加载器,或者进行日志记录.下面这段脚本适用于所有浏览器来获取正在执行js文件的路径,但是该方法只适用于脚本加载过程中执行的情 ...

  8. MS SQL执行大脚本文件时,提示“内存不足”的解决办法()

    问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行 ...

  9. SqlCommand执行带GO的SQL脚本文件

    今天工作中遇到了这个问题,其实只要把GO替换成“;”就行了,其它人写的例子用Split来拆分这一个脚本文件的内容,完全没有必要.希望对你有用.

  10. linux执行sh脚本文件命令

    linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...

随机推荐

  1. Mybatis之TypeHandler使用教程

    引言 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 ...

  2. select/poll/epoll 优缺点比较

    校招应届生简历中,有一个 C++ 项目出现的频率非常高... select 1024 fd 限制(可修改,麻烦) 需要遍历才知道哪些 fd ready 副作用:修改传入 fd_set,每次需要重新赋值 ...

  3. 三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展

    本文分享自华为云社区<三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展>,作者: 华为云头条. 近日,以"开放同飞,共赢行业AI新时代"为主题的华为云盘古大模 ...

  4. 跟着B站UP主小姐姐去华为坂田基地采访扫地僧

    摘要:谁说程序员就只能写代码呢!华为扫地僧的才艺是完全可以solo出道的那种. 忍不住想要和你们分享下我9月份的快乐呀!Mark下最近完成的一件超了不起的事情!我去你们口中别人家的公司-华为啦!这次采 ...

  5. 火山引擎 DataTester 为企业降本增效:1 个人也能成为一支 A/B 实验团队

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 今年天猫电商.京东均表示交易规模与 2021 年持平,跟往年急剧增长的销售额相比,今年的双十一显得略微" ...

  6. TeamX 引擎的高并发能力测试

    TeamX,是基于 SolonJT 引擎构建的一个团队协工具.主要功能有: Wiki(团队词条,用于写接口文档也行...) Planned(项目计划 和 个人日志) 比较兄弟产品,区别会很大:基于表格 ...

  7. Windows 安装 MySQL 5.7 x64 位

    设置MySQL 创建数据库,默认为UTF-8 下载地址:https://downloads.mysql.com/archives/installer/ 安装 网站上只有 x86 没有 x64 位,之前 ...

  8. 线上活动 | AI 头像变装秀

    ​宝子们,你的头像多久没换了? 送你一个锦囊,让你拥有既独一无二,又千变万化的专属 AI 头像 Hugging Face 将在 7 月 5 日 发起:AI 头像变装秀 ️️️游戏规则️️️ 我们将分享 ...

  9. 2023年Pycharm下载安装教程,亲测可用,持续更新

    目录 一.pycharm安装教程 二.推荐阅读 一.pycharm安装教程 1.进入官网下载pycharm 官网下载地址:https://www.jetbrains.com/pycharm/downl ...

  10. 极限五分钟,在宝塔中用 Docker 部署升讯威在线客服系统

    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可. 客户组 ...