Я не уверен, что права доступа к исполняемому файлу не соответствуют ожиданиям Вероятно, потому что мои ожидания неверны. Тем не мение:
У меня есть файл сценария, для простоты просто называется 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
?
cat s
просто печатает содержимое файла.cat s | zsh
передает ихzsh
и печатаетTest
.