我对执行文件权限不符合我的预期感到困惑。可能是因为我的期望是错误的。无论如何:
我有一个脚本文件,为了简单起见s
,它位于中~/bin
。对于此示例,文件仅包含以下几行:
#!/bin/zsh
echo "Test";
很简单的。
我导航到~/bin
目录,并chmod
具有s
to 的文件权限400
-即,仅对我只读。没有执行权限。因此,我尝试通过输入脚本路径来执行脚本,并给出以下内容:
% ./s
zsh: permission denied: ./s
到目前为止,一切都很好。由于权限错误,无法执行该文件。将权限提升到最高500
(授予执行权限)也可以正常工作-使用这些权限,文件可以正常执行:
% ./s
Test
这完全符合预期。但是然后我将chmod
权限放回至400
(再次关闭执行权限),尝试source
处理该文件,然后发生这种情况:
% source s
Test
虽然权限是 400
,但脚本将执行。
所以这是我的问题:为什么会./s
失败(应该如此),但是source s
正常执行?这不会破坏执行权限的全部目的吗?
在400
权限下,sh s
以及zsh s
同时工作。
我确定我在做某事或在某处了解严重错误。可有人指出哪里给我,并解释之间的区别./s
,source s
,sh s
和zsh s
?