Что происходит, когда файл является `source`-d в контексте Unix / Linux? - PullRequest
59 голосов
/ 17 февраля 2012

Я видел сценарии оболочки, которые содержат строку, такую ​​как:

source someOtherFile

Я знаю, что это приводит к выполнению содержимого someOtherFile, но каково значение source?


Последующие вопросы: Можно ли использовать ЛЮБОЙ сценарий или только определенный тип сценариев?Есть ли какие-либо побочные эффекты, кроме переменных окружения, когда сценарий получен (в отличие от обычного его выполнения)?

Ответы [ 3 ]

68 голосов
/ 17 февраля 2012

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

Вы можете использовать любой исполняемый скрипт оболочки. Конечный эффект будет таким же, как если бы вы ввели команды в скрипте в свой терминал. Например, если сценарий изменяет каталоги, когда он завершает работу, ваш текущий рабочий каталог будет изменен.

16 голосов
/ 17 февраля 2012

Если вы указываете оболочке, например bash, прочитать файл и выполнить команды в файле, это называется sourcing.Главное, что текущий процесс (оболочка) делает это, а не новый дочерний процесс.

В BASH вы можете использовать команду source или просто . для получения файла.

2 голосов
/ 09 февраля 2016

source - это команда Unix, которая оценивает файл после команды в виде списка команд, выполняемых в текущем контексте. Вы также можете использовать . для поиска файла.

source my-script.sh;
. my-script.sh;

Обе команды будут иметь одинаковый эффект.

Напротив, передача имени файла сценария в желаемую оболочку запускает сценарий в подоболочке, а не в текущем контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...