繁体   English   中英

在shell脚本中使用shebang

[英]Use of shebang in shell scripts

在Linux中,我们通常在脚本中添加一个shebang来调用相应的解释器。 我尝试了以下示例。

我编写了一个没有shebang并具有可执行权限的shell脚本。 我能够使用./来执行它。 但如果我写一个类似的python程序,没有shebang,我无法执行它。

为什么会这样? 据我所知,shebang需要找到翻译。 那么shell脚本是如何工作的,而不是python脚本呢?

我的假设是在当前环境中执行没有shebang的脚本,在命令行中它是你的默认shell,例如/bin/bash

shell脚本只有在你所针对的shell中才有效...没有python shell ...因为如果没有明确调用python(通过shebang或命令行),python将永远不会工作

默认情况下,shell将尝试执行脚本。 #! 记法来得晚了

这里有一个微妙的区别。 如果目标是二进制文件或以#!开头#! shebang line,然后shell调用execv成功。 如果目标是没有shebang的文本文件,则对execv将失败,并且shell可以自由尝试在/bin/sh或其他内容下启动它。

http://en.wikipedia.org/wiki/Shebang_(Unix)

在类Unix操作系统下,当一个带有shebang的脚本作为程序运行时,程序加载器会将脚本初始行的其余部分解析为解释器指令; 而是运行指定的解释器程序,将其作为参数传递给尝试运行脚本时最初使用的路径。

现在当#! 找不到,每一行都被解释为本机shell命令。 因此,如果你编写一个bash脚本并在bash shell下运行它会起作用。 如果在tcsh shell中运行相同的bash脚本,如果没有初始#!/ usr / bin / tcsh,它将无法工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM