use*_*213 11 bash shell-script
我是 shell 脚本的新手,很多书都写过在脚本开始时使用 #!(sha-bang) 行来调用解释器。这将为脚本调用一个新的 shell 并逐行进行解释。但是一个我的基本脚本仍然在没有魔术线的情况下运行。
所以我的问题是:
现在让我告诉你我的基本脚本,它只包含以下行:
echo "没有魔线的基本脚本"
当你执行一个程序时,内核会检查它是否以某种神奇的字节序列开始。如果可执行文件以 开头#!
,则内核将该行的其余部分解释为解释器名称。如果可执行文件以\177ELF
(其中\177
是字节 127)开头,则将文件加载为ELF可执行文件;这是当今大多数 unix 系统上的正常类型。
如果内核不能识别文件格式,它会拒绝执行文件并返回错误 ENOEXEC(Exec 格式错误)。当 shell 注意到这一点时,它会自行将程序作为 shell 脚本执行。
要见证这一过程,请在脚本中添加一些命令:
ps l $$
ls -l /proc/$$/exe
echo hello
Run Code Online (Sandbox Code Playgroud)
(这是针对 Linux 的,针对其他 unice 进行调整。)然后尝试从各种 shell 运行该脚本。您会看到一些 shell 产生一个新的自身实例来执行脚本(bash、ksh93),而另一些则产生/bin/sh
(dash、pdksh、zsh)。
如果未提供 magic line,则使用默认 shell 来运行脚本。这个默认 shell 可以是 Bourne shell (sh),在某些风格中就是这种情况,但是,在其他一些风格中,使用的默认 shell 与执行它的登录 shell 相同。问题是:不要让系统来决定 shell,始终在第一行提供您想要的 shell。
归档时间: |
|
查看次数: |
2100 次 |
最近记录: |