为什么我们在 shell 脚本文件的开头使用 shebang。没有它脚本还能运行吗?
我尝试在 shell 脚本中不使用 shebang 来运行它,但是它没有运行。
答案1
当文件script
以舍邦指示
#!langpath args
并设置了执行权限,Unix 将“替换它”为
exec langpath args path-to-the-script.
这种方式通常:
langpath
定义要使用的语言,应该是(编程)语言的可执行解释器的路径(例如:'/usr/bin/python')- 该语言应该接受脚本文件作为参数
- 语言应该忽略该
#!...
指令作为注释
答案2
不同的 shell 支持不同的功能。为了提供有效的建议,ShellCheck 需要知道您的脚本将在哪个 shell 上运行。根据目标 shell,您将收到不同数量的警告。
ShellCheck 通常根据 shebang 确定目标 shell(#!/bin/sh
例如第一行)。也可以使用 CLI 指定 shell -s
,例如shellcheck -s sh file
。
如果您未指定shebang 或-s
,ShellCheck 会显示此消息并使用一些默认值(bash)继续。
请注意,此错误不能通过指令忽略。这不是改进脚本的建议,而是警告 ShellCheck 缺少有用的信息。