Когда вы запускаете его с помощью bash test.sh
вы явно указываете bash загрузить и запустить test.sh
Файл нужно только прочитать, чтобы «запустить» с помощью этого метода. Но если вы просто запустите файл с ./test.sh
, он не запустится, потому что у файла нет явных разрешений на выполнение; просто прочитайте разрешения.
Это означает, что в первом случае test.sh
загружается bash
. Но сами по себе системы Unix/Linux не будут запускать файлы по умолчанию. И после этого, если вы удалите этот начальный #!/bin/bash
из ./test.sh
и попробуйте запустить его даже с разрешениями на выполнение, он не запустится, так как система не будет знать, что делать с командами под ним.
А если вам интересно, когда файлы не получают автоматически права на выполнение при создании? Что ж, это долгий разговор, но в основном выполнение чего-то подобного создаст новую поверхность атаки в вашей системе. Если кто-то может войти в вашу систему и просто выполнить файлы, записав их, это очень большая проблема.