Если я выключил, выполняют полномочия на hello.sh
и попытайтесь выполнить его
~$ sudo chmod 0666 hello.sh
~$ ./hello.sh
-bash: ./hello.sh: Permission denied
Я получаю ошибку разрешения. Но я могу легко переопределить это при помощи .
или source
встроенный.
$ . hello.sh
hello everyone
Что является целью установить выполнить разрешение на файле, если кто-то может переопределить его с помощью source
встроенный?
hello.sh
#!/bin/bash
echo 'hello everyone'
Существует различие: при выполнении сценария как ./script.sh
Вы создаете новый процесс, новый экземпляр оболочки удара. Это отклонено.
Однако, так как полномочия позволяют, Вы к читаете сценарий, что там, чтобы мешать Вам копия и вставить все, что это удовлетворяет? Эти source
сборка - в делает только что: это выполняет команды один за другим путем чтения их из текстового файла.
Когда Вы работаете ./hello.sh
, Вы говорите ядро выполнять программу hello.sh
. Если у Вас есть разрешение выполнения, то ядро читает первые несколько байтов файла, видит #! строка, таким образом, это знает, что это - сценарий, и выполняет интерпретатор (/bin/bash
), передавая его название сценария как его первый аргумент. Затем удар рассматривает файл как ряд инструкций. Если Вы не имеете, выполняют разрешение, ядро прерывает выполнение в первом шаге.
, Когда Вы работаете . hello.sh
или source hello.sh
, Вы не просите, чтобы ядро выполнилось hello.sh
. Вы просите колотить, чтобы считать файл hello.sh
и интерпретировать его как ряд инструкций.
Это - то же самое, если Вы работаете bash hello.sh
, между прочим: Вы не выполняетесь hello.sh
, Вам интерпретировал его удар (который выполняется). См. Выполнять сценарий в zsh - полномочия .