¿Por qué una secuencia de commands bash requiere un bit de ejecución si una secuencia de commands de lote de Windows solo se puede ejecutar?

Ayer me topé con la peculiaridad del script git execute bit bash , la que requiere:

git update-index --add --chmod=+x scriptname.sh 

y me pareció extraño que incluso fuera posible estancarse en esta situación. (Es decir, haber creado un file de script que no tiene permiso para ejecutar).

Si he creado un script de shell, seguramente puedo ejecutarlo bajo los permissions de los permissions de ejecución del shell. ¿Por qué necesitaría su propio bit de permiso de ejecución?

Mi pregunta es: ¿por qué un script bash requiere un bit de ejecución si un script de lote de Windows puede simplemente ejecutarse?

Para ejecutar un script tienes dos opciones en sistemas como Unix. La primera opción es usar una llamada de intérprete directa con el guión como parámetro.

 # run a bash script bash test.sh # run a python scripts python test.py 

La segunda opción es marcar su file como ejecutable, con el bit de ejecución y después de una llamada como esta …

 # sample bash ./test.sh # sample python ./test.py 

… su sistema intenta encontrar el intérprete adecuado para usted. Para esto, se usa la primera línea 'shebang' del guión.

Ejemplo de Bash:

 #!/bin/bash # points to the installed bash interpreter - bash example 

Ejemplo de Python:

 #!/usr/bin/python # points to the installed python interpreter 

Para su window de preguntas solo use la extensión de file para detectar un file ejecutable.

Bueno, Linux no es Windows. Los filesystems Linux / Unix admiten el bit ejecutable para distinguir los files ejecutables de los datos puros y para controlar los permissions de ejecución para el usuario | grupo | otros. Todavía puede ejecutar el script si lo antepone con el nombre del shell / binary con el que desea iniciarlo, pero si desea hacer ./scriptname.sh o ejecutarlo desde el path, debe marcarse como ejecutable para usted como onwer | un miembro del grupo | algún otro usuario, y para los scripts generalmente el shebang en la primera línea que define al intérprete para iniciar el script con: #!/bin/bash .