Источник или точечное переопределение оператора выполняют разрешение?

Если я выключил, выполняют полномочия на 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'
5
задан 3 September 2012 в 00:21

2 ответа

Существует различие: при выполнении сценария как ./script.sh Вы создаете новый процесс, новый экземпляр оболочки удара. Это отклонено.

Однако, так как полномочия позволяют, Вы к читаете сценарий, что там, чтобы мешать Вам копия и вставить все, что это удовлетворяет? Эти source сборка - в делает только что: это выполняет команды один за другим путем чтения их из текстового файла.

6
ответ дан 21 October 2019 в 11:24

Когда Вы работаете ./hello.sh, Вы говорите ядро выполнять программу hello.sh. Если у Вас есть разрешение выполнения, то ядро читает первые несколько байтов файла, видит #! строка, таким образом, это знает, что это - сценарий, и выполняет интерпретатор (/bin/bash), передавая его название сценария как его первый аргумент. Затем удар рассматривает файл как ряд инструкций. Если Вы не имеете, выполняют разрешение, ядро прерывает выполнение в первом шаге.

, Когда Вы работаете . hello.sh или source hello.sh, Вы не просите, чтобы ядро выполнилось hello.sh. Вы просите колотить, чтобы считать файл hello.sh и интерпретировать его как ряд инструкций.

Это - то же самое, если Вы работаете bash hello.sh, между прочим: Вы не выполняетесь hello.sh, Вам интерпретировал его удар (который выполняется). См. Выполнять сценарий в zsh - полномочия .

файла
4
ответ дан 21 October 2019 в 11:24

Другие вопросы по тегам:

Похожие вопросы: