Чому мені потрібно встановити дозволи на виконання, щоб запустити bash-скрипт, коли він може запускатися, якщо я змушую його "bash test.sh?"


0

Це вміст test.sh:

#!/bin/bash
echo "test me"

Щоб виконати bash test.sh, немає проблем. Але для виконання з ./test.sh, виникає помилка:

bash: ./test.sh: Permission denied

chmod u+x test.shможе змусити його працювати ./test.sh.

Хочу знати причину: Чому не потрібно додавати, chmod u+x test.shколи її виконувати bash test.sh?

І навіщо потрібно додати, chmod u+x test.shколи це виконати ./test.sh?


2
Можливий дублікат Як виконати скрипт bash?
JakeGould

Хоча питання "чому" МОЖЕ бути предметом думки, в цьому випадку це питання має чітку відповідь (див. Відповідь позначена). Далі, позначений дублікат є питанням "як" і тому якісно відрізняється від цього питання. Це не дублікат.
music2myear

Відповіді:


1

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

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

А якщо вам цікаво, поки файли автоматично не отримують дозволу на виконання при створенні? Ну, це довга розмова, але в основному щось подібне створить нову поверхню атаки у вашій системі. Якщо хтось може потрапити у вашу систему і просто виконати файли, записавши їх, це дуже велика проблема.


1

На відміну від операційних систем, натхнених CP / M, таких як DOS і Windows, Unix не використовує назви файлів, щоб вказати, які файли можна виконати.

Якщо ви хочете запустити файл за допомогою виклику ОС " execvpe () " або вказавши його в командному рядку, йому потрібно мати дозвіл на виконання

До тих пір , як він біт виконання встановлюється ви викликаєте назвати це все , що ви хочете , наприклад: trump.gif чи foo-script(але testне є хорошим прикладом , як ім'я вже є команда з таким ім'ям)


Так, файл НЕ повинен називатися "test", оскільки це ім'я команди.
ArchonOSX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.