Bei ./ liest er die erste Zeile und sucht sich dementsprechend den Interpreter aus, wenn mann z.B. in der Zeile stehen hat #!/bin/bash nimmt er die Bash, bei #!/bin/shell die Shell.
Wenn diese Zeile nicht gesetzt wurde, findet er bei ./ keinen Interpreter und kann deshalb das Script nicht ausführen.
Dann muss man den Interpreter manchmal Manuel angeben und kann kein ./ benutzen.
Das ist mir aber ehrlich gesagt noch nicht vorgekommen, kann aber auch daran liegen, dass ich nur selbst geschriebene Scripte einsetze und ich hier die erste Zeile beachte.