Я розгублений щодо дозволу на виконання файлів, який веде себе не так, як я очікував. Можливо, тому, що мої сподівання помиляються. У будь-якому випадку:
У мене є файл сценарію, для простоти просто називається s
, розташований в ~/bin
. Для цього прикладу файл містить лише такі рядки:
#!/bin/zsh
echo "Test";
Дуже просто.
Я переходжу до ~/bin
каталогу, і chmod
дозволу на файл s
до 400
- тобто для читання лише для мене. Немає дозволу на виконання. Тоді я намагаюся виконати сценарій, ввівши його шлях, даючи це:
% ./s
zsh: permission denied: ./s
Все йде нормально. Файл неможливо виконати через неправильні дозволи. Дозвіл компіляції до 500
(виконувати наданий дозвіл) також працює добре - з цими дозволами файл виконує штраф:
% ./s
Test
Це все як очікувалося. Але потім я chmod
дозволю назад 400
(виконати дозвіл знову), спробуйте source
файл, і це станеться:
% source s
Test
Хоча дозволи є 400
, сценарій виконується.
Тож ось моє запитання: чому не виходить ./s
(як слід), а source s
виконується нормально? Це не перешкоджає цілі дозволу на виконання?
За 400
дозволами, sh s
а zsh s
також працювати.
Я впевнений, що десь роблю або розумію щось жахливо неправильне. Може хто - то точка, де мені і пояснити різницю між ./s
, source s
, sh s
і zsh s
?