Что происходит, когда файл является "источником" -d в контексте Unix/Linux?
Я видел сценарии оболочки, которые включают строку, такую как:
source someOtherFile
Я знаю, что приводит к выполнению содержимого someOtherFile
, но каково значение source
?
Последующие вопросы: Может ли ЛЮБОЙ script быть источником или только определенным типом скриптов? Существуют ли какие-либо побочные эффекты, кроме переменных среды, когда источник script (в отличие от обычного его выполнения)?
Ответы
Ответ 1
Выполнение команды source
в script выполняет script в контексте текущего процесса. Это означает, что переменные окружения, установленные script, остаются доступными после завершения работы. Это контрастирует с тем, что обычно выполняется script, и в этом случае переменные среды, заданные в новообразованном процессе, будут потеряны после выхода script.
Вы можете запустить любую рабочую оболочку script. Конечный эффект будет таким же, как если бы вы ввели команды в script в ваш терминал. Например, если script изменяет каталоги, когда он завершается, ваш текущий рабочий каталог будет изменен.
Ответ 2
Если вы сообщите оболочке, например. bash, чтобы прочитать файл и выполнить команды в файле, он называется sourcing. Главное, текущий процесс (shell) делает это, а не новый дочерний процесс.
В BASH вы можете использовать команду source
или просто .
для источника файла.
Ответ 3
source
- это команда Unix, которая оценивает файл, следующий за командой, в виде списка команд, выполняемых в текущем контексте. Вы также можете использовать .
для поиска файла.
source my-script.sh;
. my-script.sh;
Обе команды будут иметь тот же эффект.
Напротив, передача имени файла script в требуемую оболочку будет запускать script в подоболочке, а не в текущем контексте.