我对执行文件权限的行为不符合我的预期感到困惑。可能是因为我的期望是错误的。反正:
我有一个脚本文件,为简单起见,仅称为s,位于~/bin. 就本示例而言,该文件仅包含以下几行:
#!/bin/zsh
echo "Test";
Run Code Online (Sandbox Code Playgroud)
很简单。
我浏览到~/bin目录,chmod的文件权限s来400-即只读我只。没有执行权限。然后我尝试通过输入其路径来执行脚本,给出:
% ./s
zsh: permission denied: ./s
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。由于权限错误,该文件无法执行。将权限提升到500(授予执行权限)也可以正常工作 - 使用这些权限,文件可以正常执行:
% ./s
Test
Run Code Online (Sandbox Code Playgroud)
这一切都在预料之中。但是然后我的chmod权限回落到400(再次执行权限关闭),尝试sourceing 文件,这发生了:
% source s
Test
Run Code Online (Sandbox Code Playgroud)
虽然权限是400,但脚本会执行。
所以这是我的问题:为什么./s失败(应该如此)但source s正常执行?这不会破坏执行权限的全部目的吗?
在400权限,sh s并zsh s同时工作。
我确定我正在做或理解某处可怕的错误。可有人指出哪里给我,并解释之间的区别./s,source s,sh s和zsh s?