Quando si digita
./program
La shell tenta di eseguire il programma in base al modo in cui determina il file deve essere eseguito. Se è un binario, tenterà di eseguire la subroutine di ingresso. Se il guscio rileva è uno script, ad esempio attraverso l'uso di
#!/bin/sh
o
#!/bin/awk
o più in generale
#!/path/to/interpreter
guscio passerà il file (ed eventuali argomenti specificati) come argomenti all'interprete fornito, che eseguirà quindi lo script. Se l'interprete indicato nel percorso non esiste, la shell eseguirà un errore e, se non viene trovata alcuna riga dell'interprete, la shell assumerà che lo script fornito deve essere eseguito da solo.
Un comando
sh program
è equivalente a
./program
quando la prima riga del programma contiene
#!/bin/sh
supponendo che/bin/sh è la sh nel percorso (potrebbe essere/system/bin/sh, ad esempio). Passare un binario a sh causerà a sh di considerarlo come uno script di shell, che non lo è, e il binario non è una shell interpretabile (che è testo normale). Questo è il motivo per cui non è possibile utilizzare
sh program
in questo contesto. Fallirà anche perché il programma è ruby, awk, sed, o qualsiasi altra cosa che non sia uno script di shell.
non dovrebbe essere #!/Bin/sh? – Protostome