gei*_*rha 35
假设您有myscript
包含以下内容的文件:
#!/bin/bash
echo "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
如果您将此文件设为可执行并使用 运行它./myscript
,那么内核将看到前两个字节是#!
,这意味着它是一个脚本文件。然后内核将使用该行的其余部分作为解释器,并将文件作为它的第一个参数传递。所以,它运行:
/bin/bash myscript
Run Code Online (Sandbox Code Playgroud)
bash 读取文件并执行其中包含的命令。
因此,对于 bash(或您的脚本需要的任何解释器)来“执行”脚本,它只需要能够读取文件。
因此,对于脚本,执行位只是让执行它更方便一些。只要 bash 是可执行的,您始终可以使用脚本文件作为参数运行 bash,或者以交互方式运行 bash 并将脚本逐行复制粘贴到终端中以执行命令。
Lek*_*eyn 17
确保您没有将“执行 shell 脚本”与“使用 sh 运行 shell 脚本”混淆。
这不会受到以下文件权限的影响file.sh
:
sh file.sh
Run Code Online (Sandbox Code Playgroud)
您正在执行sh
(解析为程序/bin/sh
),它读取file.sh
并执行它的代码。
如果您真的执行脚本本身,文件权限就会生效:
./file.sh
Run Code Online (Sandbox Code Playgroud)
请注意,非 Linux 文件系统(如 FAT)不支持文件权限。因此,即使您运行chmod -x file.sh
,该文件仍将具有以前的权限。
执行权限由文件系统强制执行。但是程序也可以通过读取文件内容来“执行”代码,这绕过了“执行”的文件系统权限。