- Команда source в Bash
- Синтаксис команды source
- Примеры команды source
- Функции поиска
- Файл конфигурации Bash
- Выводы
- Команда Source в Bash
- Bash Source Command
- Команда source читает и выполняет команды из файла, указанного в качестве аргумента в текущей среде оболочки. Полезно загружать функции, переменные и файлы конфигурации в сценарии оболочки.
- Синтаксис исходной команды
- Примеры исходных команд
- Функции поиска
- Конфигурационный файл Bash
- Вывод
- Команда «.» (точка) или source
- Команда source в Linux
- Команда source linux
- Команда source – как выполнить bash-скрипт не запуская второй процесс bash
Команда source в Bash
source команда считывает и выполняет команды из файла, указанного в качестве аргумента в текущей среде оболочки. Полезно загружать функции, переменные и файлы конфигурации в сценарии оболочки.
source — это оболочка, встроенная в Bash и другие популярные оболочки, используемые в операционных системах Linux и UNIX. Его поведение может немного отличаться от оболочки к оболочке.
Синтаксис команды source
Синтаксис source команды следующий:
- source и . (точка) — это та же команда.
- Если FILENAME не является полным путем к файлу, команда будет искать файл в каталогах, указанных в $PATH среды $PATH . Если файл не найден в $PATH , команда будет искать файл в текущем каталоге.
- Если заданы какие-либо ARGUMENTS , они станут позиционными параметрами для FILENAME .
- Если FILENAME существует, source выхода source команды равен 0 , в противном случае, если файл не найден, он вернет 1 .
Примеры команды source
В этом разделе мы рассмотрим несколько основных примеров использования source команды.
Функции поиска
Если у вас есть сценарии оболочки, использующие те же функции, вы можете извлечь их в отдельный файл, а затем указать этот файл в своих сценариях.
В этом примере мы создадим файл, который включает функцию bash, которая проверяет, является ли пользователь, запускающий скрипт, корневым, и если нет, он показывает сообщение и завершает скрипт.
Теперь в каждом скрипте, который должен запускаться только пользователем root, просто укажите файл functions.sh и вызовите функцию:
Если вы запустите приведенный выше сценарий как пользователь без полномочий root, он напечатает «Этот сценарий должен быть запущен от имени пользователя root» и завершится.
Преимущество этого подхода заключается в том, что ваши сценарии будут меньше и более читабельны, вы можете повторно использовать один и тот же файл функции, когда это необходимо, а в случае, если вам нужно изменить функцию, вы отредактируете только один файл.
Файл конфигурации Bash
С помощью source команды вы также можете читать переменные из файла. Переменные должны быть установлены с использованием синтаксиса Bash, VARIABLE=VALUE .
Создадим тестовый файл конфигурации:
В вашем сценарии bash используйте команду source для чтения файла конфигурации:
Если вы запустите сценарий, результат будет выглядеть так:
Выводы
В этом руководстве вы узнали, как использовать встроенную команду source в сценариях оболочки.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Команда Source в Bash
Bash Source Command
Команда source читает и выполняет команды из файла, указанного в качестве аргумента в текущей среде оболочки. Полезно загружать функции, переменные и файлы конфигурации в сценарии оболочки.
source это оболочка, встроенная в Bash и другие популярные оболочки, используемые в операционных системах Linux и UNIX. Его поведение может немного отличаться от оболочки к оболочке.
Синтаксис исходной команды
Синтаксис source команды следующий:
- source и . (точка) — это одна и та же команда.
- Если FILENAME путь к файлу не полный, команда выполнит поиск файла в каталогах, указанных в $PATH переменной среды . Если файл не найден в $PATH команде, будет выполнен поиск файла в текущем каталоге.
- Если ARGUMENTS они заданы, они станут позиционными параметрами для FILENAME .
- Если FILENAME существует source код завершения команды 0 , в противном случае, если файл не найден, он вернется 1 .
Примеры исходных команд
В этом разделе мы рассмотрим некоторые основные примеры использования source команды.
Функции поиска
Если у вас есть сценарии оболочки, использующие те же функции, вы можете извлечь их в отдельный файл, а затем получить этот файл в своих файлах.
В этом примере мы создадим файл, который включает в себя функцию bash, которая проверяет, является ли пользователь, выполняющий сценарий, пользователем root, и, если нет, показывает сообщение и завершает работу сценария.
Преимущество этого подхода состоит в том, что ваши скрипты будут меньше и более читабельными, вы можете повторно использовать один и тот же файл функций при необходимости, и в случае, если вам нужно изменить функцию, вы отредактируете только один файл.
Конфигурационный файл Bash
С помощью source команды вы также можете читать переменные из файла. Переменные должны быть установлены с использованием синтаксиса Bash VARIABLE=VALUE .
Давайте создадим тестовый файл конфигурации:
В вашем bash-скрипте используйте source команду для чтения файла конфигурации:
Если вы запустите скрипт, результат будет выглядеть так:
Вывод
Из этого руководства вы узнали, как использовать source встроенную команду в сценариях оболочки.
Источник
Команда «.» (точка) или source
Команда «.» (точка) — это синоним команды source , встроенной в оболочку. Часто используется для включения внешних файлов внутри сценария. Рассмотрим в чём заключается суть такого включения на примере файла .bash_profile :
На второй строчке с помощью оператора «.» выполняется содержимое файла
/.bashrc . Возникает вопрос, почему нельзя обойтись без точки?
Дело в том, что при использовании точки не создаётся копии оболочки — скрипт выполняется в текущей оболочке, причём все переменные, инициализированные в данном скрипте, после его завершения не исчезают, а сохраняются в окружении.
И наоборот, если скрипт запускается без использования точки, то создаётся копия оболочки, и по завершении скрипта в родительскую оболочку ничего не возвращается — все переменные окружения, созданные в скрипте, безвозвратно теряются.
Проиллюстрируем сказанное на простом примере. Создадим файл test.sh следующего содержания:
Если теперь запустить скрипт, то на экран будет выведено значение внутренней переменной скрипта var :
Однако эта переменная не сохранится после завершения работы скрипта и не будет присутствовать в окружении текущей оболочки:
Если же запустить скрипт с использованием точки, то он выполнится с тем же результатом. Только переменная var будет доступна среди переменных окружения текущей оболочки:
Дочерняя копия оболочки при использовании точки создаётся только в том случае, когда процесс запускается в фоновом режиме. Это единственное исключение из общего правила.
Источник
Команда source в Linux
Командная оболочка играет очень важную роль в работе семейства операционных систем Linux. Она используется не только пользователями для работы в терминале, но и программами, а также компонентами операционной системы для обмена данными между собой. Для этого применяются переменные окружения. Для перезагрузки переменных окружения из файла часто используется команда source.
Эта команда позволяет выполнить скрипт в текущем процессе оболочки bash. По умолчанию для выполнения каждого скрипта запускается отдельная оболочка bash, хранящая все его переменные и функции. После завершения скрипта всё это удаляется вместе с оболочкой. Команда source позволяет выполнить скрипт в текущем командном интерпретаторе, а это значит, что всё переменные и функции, добавленные в этом скрипте, будут доступны также и в оболочке после его завершения. Как вы уже поняли, в этой статье будет рассмотрена команда source linux.
Команда source linux
Синтаксис команды очень прост. Надо вызвать саму команду и передать ей путь к исполняемому файлу:
$ source путь_к_файлу аргументы
Никаких опций более не нужно. Если указан не абсолютный путь к файлу, а просто имя файла, то утилита будет искать исполняемый файл в текущей папке и директориях, указанных в переменной PATH. Давайте разберём несколько примеров работы с утилитой. Создаём скрипт, объявляющий переменную:
Затем загрузим переменную из этого файла:
Теперь можно попытаться вывести содержимое переменной и убедиться, что всё работает:
Однако, переменная есть только в текущем командном интерпретаторе, в других командных интерпретаторах её нет. Это отличие команды source от команды export, позволяющей экспортировать переменные окружения глобально.
Если выполняемому скрипту нужно передать параметры, можно это сделать, просто перечислив их после пути к файлу скрипта. Модифицируем наш скрипт, чтобы переменная бралась из первого параметра:
И снова выполняем:
Аналогично работают и функции. Если объявить функцию в скрипте bash, а затем выполнить его с помощью команды source linux, то функция станет доступна в интерпретаторе:
Теперь можно выполнить функцию print_site в терминале или любом другом скрипте:
Для тех, кто знаком с программированием на языке Си, можно провести аналогию с директивой #include, делающей доступными в текущем файле функции из других файлов. Если файл, имя которого передано как параметр команде, не существует, она вернёт код возврата 1 и завершится:
Вместо команды source можно использовать точку (.), однако здесь следует быть осторожными — между точкой и именем файла должен быть пробел для того, чтобы bash интерпретировал эту точку как отдельную команду, а не как часть имени файла:
Однако, нельзя писать .losstsource или ./losstsource, потому что обозначение ./ — это уже отсылка на текущую директорию, скрипт будет выполнен как обычно.
Источник
Команда source – как выполнить bash-скрипт не запуская второй процесс bash
В линукс-системах, в консоли, каждый скрипт запускается следующим образом:
1) определяется необходимый интерпретатор для его выполнения (на основе указания-подсказки внутри самого файла, по расширению, и т.п.)
2) запускается новый процесс командного интерпретатора, в рамках которого и выполняются инструкции из скрипта
3) процесс-родитель, из которого была запущена новая копия интерпретатора приостанавливает свою работу
4) по выполнении всех инструкций дочерний процесс интерпретатора завершает свою работу
5) процесс-родитель возобновляет свою работу
Почему это имеет значение? Представьте что у вас есть некоторая иерархическая система скриптов использующих одну переменную, значение которой определяется динамически, на основе нескольких параметров. Почему после запуска скрипта должным образом инициализированная и экспортированная переменная не доступна из консоли, из которой производился запуск и не может быть использована другими скприптами?
У каждого процесса есть своя собственная среда окружения (в это понятие, кроме всего прочего, входят и переменные окружения). Когда мы в контексте дочернего процесса экспортировали переменную, она успешно сохранялась в переменных окружения дочернего процесса и существовала все время пока существовал сам дочерний процесс. По завершению дочернего процесса – когда были выполнены все команды из файла-скрипта, дочерний процесс завершился, вместе с чем его рабочее пространство со всеми экспортируемыми переменными также перестало существовать.
В результате, если у вас есть скрипт test_export.sh следующего содержания
#!/bin/sh
export MYVAR=”some value”;
то результатом следующей последовательности команд:
будет пустая строка – текущему экземпляру интерпретатора ничего не известно о только что завершившемся процессе интерпретатора, выполнявшего какие-то экспорты в свою среду окружения.
Для того чтобы команды скрипта выполнялись в контексте текущего экземпляра интерпретатора необходимо
использовать команду “ source ” или его аналог команду “.” – да, команда точка.
1) . ./test_export.sh или source ./test_export.sh
2) echo $MYVAR
Таким образом мы указываем интерпретатору не запускать дополнительный экземпляр для обработки комманд скрипта,а заняться им самому.
Источник