Bash es un intérprete; acepta entrada y hace lo que quiera. No necesita prestar atención al bit ejecutable. De hecho, Bash es portátil y puede ejecutarse en sistemas operativos y sistemas de archivos que no tienen ningún concepto de bit ejecutable.
Lo que importa del bit ejecutable es el núcleo del sistema operativo. Cuando el kernel de Linux realiza exec, por ejemplo, comprueba que el sistema de archivos no está montado con una noexecopción, comprueba el bit ejecutable del archivo de programa y hace cumplir los requisitos impuestos por los módulos de seguridad (como SELinux o AppArmor).
Tenga en cuenta que el bit ejecutable es un tipo de control bastante discrecional. En un sistema Linux x86-64, por ejemplo, puede omitir la verificación del núcleo del bit ejecutable invocando explícitamente /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2como intérprete :
cp /bin/ls /tmp/
chmod -x /tmp/ls
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /tmp/ls
Esto es algo análogo al abastecimiento del código fuente de Bash en Bash, excepto que ld.soes el intérprete, y el código que ejecuta es código de máquina en formato ELF.
chmodpueda permitirle establecer permisos (incluido `x) con un número octal le da una idea de la época de la que proviene. No me sorprendería que comenzara como un indicador rápido y sucio de "este es un archivo binario que puede ejecutar", desde los días previos a la invención de she-bang, pero no tengo evidencia de eso