Коли ви запускаєте його з bash test.shвами, ви прямо говорите bash завантажуватися та запускатися test.sh. Файл потрібно лише прочитати, щоб “запустити” за допомогою цього методу. Але якщо ви просто запустите файл з ./test.shподібним, він не запуститься, оскільки файл не має явних дозволів на виконання; просто читайте permissons.
Значить, у першому випадку test.shзавантажується bash. Але самостійно системи Unix / Linux не запускають файли за замовчуванням. І раніше, якщо ви вилучите цей початковий #!/bin/bashз нього ./test.shі спробуєте запустити його навіть з дозволами на виконання, він не запуститься, оскільки система не знатиме, що робити з командами під ним.
А якщо вам цікаво, поки файли автоматично не отримують дозволу на виконання при створенні? Ну, це довга розмова, але в основному щось подібне створить нову поверхню атаки у вашій системі. Якщо хтось може потрапити у вашу систему і просто виконати файли, записавши їх, це дуже велика проблема.