脚本中的#! /bin/bash是什么意思?

Posted 普通学习者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本中的#! /bin/bash是什么意思?相关的知识,希望对你有一定的参考价值。

(1) #! /bin/bash是什么意思?

在查看别人的脚本时,脚本的第一行经常是这样:
#!/bin/bash。#读作“sharp”,!读作“bang”,合在一起写作shebang,shebang后跟着bash的绝对路径/bin/bash。这一行的作用是使用bash来解释后面的命令。如果脚本是用tcsh写的,这一行相应地变为:#! usr/bin/tcsh,注意一定要确认路径是否正确。另外shebang只有在脚本第一行且顶格写才起作用。

(2) 为什么不加shebang也可以正确运行脚本?

脚本有两种运行方式,第一种是使用
./script.sh(./表示当前路径,假设脚本在当前路径,且具有执行权限),这种情况下不加shebang,会使用默认的shell解释命令,比如bash;第二种是使用bash ./script.sh(./表示当前路径,假设脚本在当前路径),这种情况下如果不加shebang或shebang指定的不是bash,仍然会使用bash解释命令,也就是说shebang不起作用。

(3) shebang的不同写法

由于不同系统bash所在目录可能不同,比如有可能在/bin或者/usr/bin,有一种推荐的shebang写法是#! /usr/bin/env bash,env命令会搜索bash所在路径
,不用自己去指定。不过env本身的路径在不同系统也可能是不同的。

参考:
(1) https://stackoverflow.com/questions/8967902/why-do-you-need-to-put-bin-bash-at-the-beginning-of-a-script-file
(2) https://superuser.com/questions/195826/bash-shebang-for-dummies
(3) http://www.tldp.org/LDP/abs/html/sha-bang.html#FTN.AEN214
(4) https://www.cyberciti.biz/tips/finding-bash-perl-python-portably-using-env.html
(5) https://stackoverflow.com/questions/10376206/what-is-the-preferred-bash-shebang
(6) https://unix.stackexchange.com/questions/103467/what-is-env-command-doing

以上是关于脚本中的#! /bin/bash是什么意思?的主要内容,如果未能解决你的问题,请参考以下文章

[shell]Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别

linux脚本里的#! 是什么意思

Shell脚本入门及搭建yum仓库脚本

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

linux shell #[感叹号]/bin/bash 是什么意思?

为啥需要将#!/bin/bash 放在脚本文件的开头?