Работали ли вы с Bash?

«Работали ли вы с Bash?» — вопрос из категории Linux и ОС, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, активно использую Bash для автоматизации рабочих процессов в разработке на C++. Это неотъемлемая часть инструментария при работе в Linux-среде.

Основные сценарии использования:

  • Сборка проектов: Написание скриптов для конфигурации (CMake), компиляции с разными флагами и целевыми платформами.
  • Автоматизация тестирования: Запуск юнит-тестов (Google Test, Catch2), интеграционных тестов и анализ их результатов.
  • CI/CD пайплайны: Подготовка окружения, запуск статических анализаторов (clang-tidy, cppcheck), проверка форматирования кода (clang-format).
  • Обработка данных: Анализ логов, профилировочных данных (perf, gprof), сгенерированных приложением.

Пример Bash-скрипта для типичного C++ workflow:

#!/bin/bash
set -euo pipefail  # Строгий режим: прерывать при ошибках, использовать pipefail

PROJECT_NAME="my_app"
BUILD_DIR="build"

echo "[1/4] Configuring with CMake..."
cmake -B "$BUILD_DIR" -DCMAKE_BUILD_TYPE=Release -DUSE_SSE=ON

echo "[2/4] Building..."
cmake --build "$BUILD_DIR" -j$(nproc)

echo "[3/4] Running tests..."
cd "$BUILD_DIR" && ctest --output-on-failure

echo "[4/4] Static analysis..."
# Запуск clang-tidy для списка файлов
find ../src -name "*.cpp" | xargs -I {} clang-tidy {} -- -I../include

echo "Build and check completed successfully."

Также регулярно использую базовые конструкции: циклы (for, while), условия (if-else), работу с аргументами скрипта ($1, $@, shift), подстановки команд и перенаправление потоков ввода-вывода.