Al escribir
./program
La cáscara trata de ejecutar el programa de acuerdo a cómo se determina el archivo necesita ser ejecutado. Si es un archivo binario, intentará ejecutar la subrutina de entrada. Si la cáscara detecta que es una secuencia de comandos, por ejemplo a través del uso de
#!/bin/sh
o
#!/bin/awk
o más generalmente
#!/path/to/interpreter
la cáscara pasará el archivo (y cualquier argumentos proporcionados) como argumentos para el intérprete proporcionado, que luego ejecutará el script. Si el intérprete dado en el camino no existe, el intérprete de comandos tendrá un error, y si no se encuentra una línea de intérprete, el intérprete asumirá que el guión suministrado se ejecutará solo.
Un comando
sh program
es equivalente a
./program
cuando la primera línea de programa contiene
#!/bin/sh
suponiendo que/bin/sh es la sh en su camino (podría ser/system/bin/sh, por ejemplo). Pasar un binario a sh hará que sh lo trate como un script de shell, que no lo es, y binary no es un shell interpretable (que es texto plano). Es por eso que no puede usar
sh program
en este contexto. También fallará debido a que el programa es ruby, awk, sed o cualquier otra cosa que no sea un script de shell.
¿No debería ser #!/Bin/sh? – Protostome