Estoy confundido acerca de que los permisos de ejecución de archivos no se comporten como esperaba. Probablemente porque mis expectativas son incorrectas. De todas formas:
Tengo un archivo de script, por simplicidad solo se llama s
, ubicado en ~/bin
. Por el bien de este ejemplo, el archivo contiene solo las siguientes líneas:
#!/bin/zsh
echo "Test";
Muy simple.
Navego hasta el ~/bin
directorio y chmod
los permisos de archivo de s
to 400
, es decir, solo lectura para mí. Sin permiso de ejecución. Entonces trato de ejecutar el script ingresando su ruta, dando esto:
% ./s
zsh: permission denied: ./s
Hasta aquí todo bien. El archivo no se puede ejecutar debido a los permisos incorrectos. El aumento de permisos hasta 500
(permiso de ejecución concedido) también funciona bien: con estos permisos, el archivo se ejecuta bien:
% ./s
Test
Todo esto es como se esperaba. Pero luego vuelvo a los chmod
permisos 400
(ejecutar el permiso nuevamente), intentando source
el archivo, y esto sucede:
% source s
Test
Aunque los permisos son 400
, el script se ejecuta.
Así que aquí está mi pregunta: ¿por qué ./s
falla (como debería) pero se source s
ejecuta normalmente? ¿Esto no vence el propósito completo del permiso de ejecución?
Con 400
permisos, sh s
y zsh s
también trabajo.
Estoy seguro de que estoy haciendo o entendiendo algo horriblemente mal en alguna parte. Puede señalar a alguien dónde a mí, y explicar la diferencia entre ./s
, source s
, sh s
y zsh s
?
cat s
solo imprime el contenido del archivo.cat s | zsh
los pasazsh
e imprimeTest
.