Введение
Эта лабораторная работа посвящена изучению и использованию команды source в Linux — мощного инструмента для выполнения скриптов непосредственно в текущей оболочке (shell). В отличие от обычного запуска скрипта, который выполняется в отдельном подпроцессе, команда source выполняет команды из файла в текущем окружении. Это позволяет переменным и функциям, определенным в скрипте, сохраняться в вашей текущей сессии.
В ходе этой лабораторной работы вы узнаете:
- Как создавать и запускать скрипты с помощью команды
source - Как передавать параметры в скрипты при использовании
source - В чем разница между командой
sourceи обычным запуском скрипта - Как использовать команду
sourceдля настройки переменных окружения
К концу этой лабораторной работы вы будете уверенно использовать команду source для эффективного написания скриптов и управления окружением в Linux.
Создание и выполнение базового скрипта через source
На этом этапе мы создадим простой файл скрипта и используем команду source для его выполнения в текущей оболочке. Это поможет нам понять, чем source отличается от обычного запуска скрипта.
Когда вы запускаете скрипт обычным способом (используя ./script.sh), оболочка создает новый подпроцесс для его выполнения. Любые переменные или функции, определенные в этом скрипте, существуют только внутри этого подпроцесса и исчезают после завершения работы скрипта. Однако при использовании команды source (или ее сокращенного варианта .) команды из скрипта выполняются в вашей текущей оболочке, что позволяет переменным и функциям сохраняться после завершения работы скрипта.
Давайте создадим базовый скрипт, чтобы продемонстрировать эту концепцию:
1. Переход в рабочую директорию
Сначала убедитесь, что вы находитесь в нужной директории:
cd ~/project
2. Создание простого файла скрипта
Создайте новый файл с именем variables.sh с помощью редактора nano:
nano variables.sh
Добавьте в файл следующее содержимое:
#!/bin/bash
## Этот скрипт устанавливает переменную окружения
export WEATHER="Sunny"
echo "The weather is now set to: $WEATHER"
Нажмите Ctrl+O для сохранения файла, затем Enter для подтверждения имени файла и, наконец, Ctrl+X для выхода из nano.
3. Сделайте скрипт исполняемым
Прежде чем мы сможем запустить скрипт, нам нужно сделать его исполняемым:
chmod +x variables.sh
4. Обычный запуск скрипта
Сначала давайте запустим скрипт традиционным способом:
./variables.sh
Вы должны увидеть вывод, похожий на этот:
The weather is now set to: Sunny
Теперь проверьте, существует ли переменная WEATHER в вашей текущей оболочке:
echo $WEATHER
Скорее всего, вы ничего не увидите или получите пустую строку. Это происходит потому, что переменная была установлена только в подпроцессе, который выполнял скрипт, а не в вашей текущей оболочке.
5. Выполнение скрипта через source
Теперь давайте используем команду source для запуска скрипта:
source variables.sh
Вы увидите тот же вывод:
The weather is now set to: Sunny
Снова проверьте переменную WEATHER:
echo $WEATHER
На этот раз вы должны увидеть:
Sunny
Переменная WEATHER теперь существует в вашей текущей оболочке, потому что вы использовали команду source для выполнения скрипта.
6. Использование сокращенной записи
Вы также можете использовать точку (.) в качестве сокращения для команды source:
. ./variables.sh
Это даст тот же результат, что и использование source variables.sh. Префикс ./ указывает оболочке, что нужно выполнить скрипт из текущей директории.
Использование source с параметрами
На этом этапе мы научимся передавать параметры в скрипт при использовании команды source. Это полезно, когда нужно сделать скрипты более гибкими и пригодными для повторного использования.
Как и при обычном запуске, вы можете передавать аргументы в скрипт при использовании команды source. Внутри скрипта эти аргументы доступны через стандартные позиционные параметры ($1, $2 и т.д.), точно так же, как если бы вы запускали скрипт напрямую.
1. Создание скрипта, принимающего параметры
Создайте новый файл с именем greeting.sh в директории ~/project:
cd ~/project
nano greeting.sh
Добавьте в файл следующее содержимое:
#!/bin/bash
## Этот скрипт принимает параметр имени и устанавливает переменную приветствия
## Проверка, был ли предоставлен параметр
if [ -z "$1" ]; then
NAME="Guest"
else
NAME="$1"
fi
## Установка переменной окружения приветствия
export GREETING="Hello, $NAME!"
echo "$GREETING"
Сохраните и закройте nano, нажав Ctrl+O, Enter, а затем Ctrl+X.
2. Сделайте скрипт исполняемым
chmod +x greeting.sh
3. Выполнение скрипта через source с параметром
Давайте выполним скрипт через source и передадим параметр имени:
source greeting.sh "Alice"
Вы должны увидеть вывод:
Hello, Alice!
Теперь проверьте, установлена ли переменная GREETING в вашей текущей оболочке:
echo $GREETING
Вы должны увидеть:
Hello, Alice!
4. Выполнение с другим параметром
Попробуйте выполнить скрипт снова с другим именем:
source greeting.sh "Bob"
Вывод:
Hello, Bob!
Снова проверьте переменную GREETING:
echo $GREETING
Вывод:
Hello, Bob!
Обратите внимание, как переменная GREETING обновилась новым значением.
5. Выполнение без параметров
Вы также можете выполнить скрипт без параметров:
source greeting.sh
Вывод:
Hello, Guest!
Скрипт использует значение по умолчанию ("Guest"), когда параметр не предоставлен.
Проверьте переменную GREETING еще раз:
echo $GREETING
Вывод:
Hello, Guest!
Это демонстрирует, как можно сделать скрипты адаптивными, обрабатывая различные входные параметры.
Создание скрипта для настройки среды разработки
На этом этапе мы создадим более практичный пример: скрипт, который настраивает среду разработки с несколькими переменными. Это распространенный сценарий использования команды source в реальных задачах.
1. Создание скрипта настройки среды разработки
Создайте новый файл с именем dev_env.sh в директории ~/project:
cd ~/project
nano dev_env.sh
Добавьте в файл следующее содержимое:
#!/bin/bash
## Скрипт настройки среды разработки
## Настройки подключения к базе данных
export DB_HOST="localhost"
export DB_PORT="5432"
export DB_USER="dev_user"
export DB_PASSWORD="dev_password"
export DB_NAME="dev_database"
## Настройки API
export API_URL="http://localhost:3000/api"
export API_KEY="dev_api_key_123"
## Пути приложения
export APP_ROOT="/home/labex/project/app"
export LOG_DIR="/home/labex/project/logs"
## Создание директорий, если они не существуют
mkdir -p $APP_ROOT
mkdir -p $LOG_DIR
## Вывод сообщения о подтверждении
echo "Development environment configured with the following settings:"
echo "-----------------------------------------------------------"
echo "Database: $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME"
echo "API URL: $API_URL"
echo "App Root: $APP_ROOT"
echo "Log Directory: $LOG_DIR"
echo "-----------------------------------------------------------"
echo "Environment is ready for development!"
Сохраните и закройте nano, нажав Ctrl+O, Enter, а затем Ctrl+X.
2. Сделайте скрипт исполняемым
chmod +x dev_env.sh
3. Выполнение скрипта настройки среды через source
Теперь давайте выполним скрипт через source, чтобы настроить нашу среду разработки:
source dev_env.sh
Вы должны увидеть вывод, похожий на этот:
Development environment configured with the following settings:
-----------------------------------------------------------
Database: dev_user@localhost:5432/dev_database
API URL: http://localhost:3000/api
App Root: /home/labex/project/app
Log Directory: /home/labex/project/logs
-----------------------------------------------------------
Environment is ready for development!
4. Проверка установки переменных окружения
Давайте проверим некоторые переменные окружения, которые были установлены скриптом:
echo "Database connection string: $DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME"
Вывод:
Database connection string: dev_user:dev_password@localhost:5432/dev_database
Проверьте настройки API:
echo "API settings: $API_URL with key $API_KEY"
Вывод:
API settings: http://localhost:3000/api with key dev_api_key_123
5. Проверка создания директорий
Проверьте, были ли созданы директории, указанные в скрипте:
ls -la ~/project/app ~/project/logs
Вы должны увидеть вывод, подтверждающий, что обе директории существуют.
Этот пример демонстрирует, как можно использовать команду source для настройки полноценной среды разработки с множеством переменных окружения и конфигураций. Такой подход часто используется в рабочих процессах разработки для переключения между различными средами (разработка, тестирование, продакшн и т.д.).
Резюме
В этой лабораторной работе вы узнали, как использовать команду source в Linux для выполнения скриптов в текущем окружении оболочки. Вот краткий итог того, что вы сделали:
Создание и выполнение базовых скриптов: Вы узнали, чем использование
sourceотличается от обычного запуска скрипта, так как это позволяет переменным и функциям, определенным в скрипте, сохраняться в вашей текущей сессии.Передача параметров в скрипты через source: Вы изучили, как сделать скрипты более гибкими, передавая им параметры при использовании команды
source, и как обрабатывать эти параметры внутри скрипта.Настройка сред разработки: Вы создали практический скрипт, который настраивает среду разработки с несколькими переменными окружения и конфигурациями — это распространенный реальный сценарий использования команды
source.
Команда source — это мощный инструмент в Linux-скриптинге, который позволяет:
- Устанавливать переменные окружения, которые сохраняются на протяжении всей сессии оболочки
- Определять функции, которые можно использовать позже в сессии
- Создавать модульные конфигурации, которые можно использовать повторно
- Быстро и единообразно настраивать сложные окружения
Эти навыки являются фундаментальными для всех, кто работает с системами Linux, особенно для разработчиков, системных администраторов и DevOps-инженеров. Освоив команду source, вы сможете создавать более эффективные и организованные скрипты для управления вашим окружением в Linux.



