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