К основному содержанию
правило официальный · GitHub

shell — правило для GitHub Copilot: безопасные bash-скрипты

Правило, которое заставляет GitHub Copilot писать чистые и безопасные shell-скрипты. Применяется к файлам *.sh автоматически.

Установить в GitHub Copilot · Вручную: положить файлы Все способы и платформы ↓
.github/instructions/shell.instructions.md
Открыть на GitHub

Что делает shell

Правило содержит конвенции для bash, sh и zsh: set -euo pipefail, двойные кавычки вокруг переменных, mktemp для временных файлов, trap для очистки. Copilot следует им при генерации кода в файлах *.sh.

Для работы с JSON и YAML правило требует jq и yq вместо grep и awk. Если этих инструментов нет, скрипт должен упасть с понятным сообщением — это заложено в инструкции.

Скрипты по этому правилу ориентированы на автоматизацию и тестирование, не на прод. Поэтому лишнее логирование не приветствуется, а вывод echo должен быть коротким.

Какие задачи решает

  • заставить Copilot добавлять set -euo pipefail в каждый скрипт
  • генерировать скрипты с безопасными раскрытиями переменных вместо eval
  • парсить JSON и YAML через jq/yq, а не grep
  • создавать временные файлы через mktemp с автоочисткой
  • получать одинаковую структуру скриптов: shebang, header, функции, main

Примеры запросов агенту

  • сгенерируй скрипт для бэкапа директории по правилу shell
  • напиши bash-скрипт, который читает config.json и проверяет поля
  • добавь обработку ошибок и очистку временных файлов в этот скрипт

Как установить shell

Вручную: положить файлы

.github/instructions/shell.instructions.md

Поле applyTo задаёт, к каким файлам применять

По шагам, с командами для каждой платформы: AGENTS.md и CLAUDE.md: что это, кто читает и какой выбрать

Из того же набора732

Весь набор →
update-docs-on-code-change Правило для GitHub Copilot, которое напоминает обновлять README.md и документацию, когда меняется код. Пригодится, если доки у вас отстают от реальности. ★ 40 418звёзд репо terraform-azure Правило задаёт Copilot стиль и ограничения при работе с Terraform на Azure: структура файлов, модули AVM, запрет на секреты в состоянии. ★ 40 418звёзд репо tanstack-start-shadcn-tailwind Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 418звёзд репо swift-mcp-server Правило задаёт Copilot шаблоны для сборки MCP-серверов на Swift через официальный SDK: инструменты, ресурсы, промпты и транспорты. ★ 40 418звёзд репо scala2 Правило задаёт Copilot стиль Scala по гайду Databricks: неизменяемость, чистые функции, именование. Пригодится, если пишете на Scala 2.12 или 2.13. ★ 40 418звёзд репо rust-mcp-server Правило задаёт Copilot ориентиры при написании MCP-серверов на Rust через официальный SDK rmcp. Пригодится, когда проект на Rust и нужен свой MCP-сервер. ★ 40 418звёзд репо r Задаёт Copilot правила генерации кода на R: стиль проекта, безопасность, работа с путями и данными. Пригодится, если в репозитории есть .R, .Rmd или .qmd файлы. ★ 40 418звёзд репо qa-engineering-best-practices Правило для GitHub Copilot с набором инструкций по тестированию: пирамида тестов, именование, ассерты, баг-репорты. Пригодится, когда Copilot пишет тесты в вашем проекте. ★ 40 418звёзд репо

Похожие

bash-scripting Mindrally Скилл задаёт агенту правила написания Bash-скриптов: валидация ввода, обработка ошибок, переносимость. Пригодится, когда агент пишет деплой, бэкапы или cron-задачи. CX Codex +1 875установок linux-shell-scripting zebbern Скилл с готовыми шаблонами bash-скриптов: бэкапы, мониторинг ресурсов, управление пользователями, разбор логов. Пригодится, когда агенту нужно написать рабочий скрипт, а не набросок. CX Codex +1 ★ 4 676звёзд репо hyva-exec-shell-cmd hyva-themes Скилл находит стек разработки Magento и оборачивает консольные вызовы для контейнеров или локальной системы. CX Codex +1 1 300установок bun-shell secondsky Скилл для работы с shell-скриптами на Bun: шаблонные литералы Bun.$, Bun.spawn, управление процессами и выводом. CX Codex +1 394установок bash-script-validator akin-ozer Скилл прогоняет bash и POSIX-скрипты через синтаксическую проверку, ShellCheck и собственные проверки безопасности. Пригодится перед CI. CX Codex +1 679установок bash-script-generator akin-ozer Скилл, который превращает задачу в готовый bash-скрипт: собирает требования, пишет код по шаблону и проверяет его. CX Codex +1 670установок skill-stocktake affaan-m Проверяет качество локальных и глобальных скиллов Claude Code. Находит устаревшие файлы и проводит аудит батчами через субагента. CX Codex +1 4 500установок

Рядом в теме «Настройка агента: память, контекст, субагенты»

Все правила IDE по теме «Настройка агента: память, контекст, субагенты» →

Вопросы о shell

Как установить правило shell в GitHub Copilot?

Создайте файл .github/instructions/shell.instructions.md в корне репозитория и вставьте туда содержимое правила. Copilot подхватит его для всех файлов *.sh.

Что делает правило shell?

Задаёт стандарты для генерации shell-скриптов: обязательные set -euo pipefail, безопасные подстановки, mktemp для временных файлов, jq/yq для структурированных данных.

Что нужно для работы правила?

В скриптах, которые парсят JSON или YAML, нужны jq и yq. Правило предписывает проверять их наличие и падать с понятной ошибкой, если инструментов нет.

Исходный текст

shell.instructions.md · MIT
---
description: 'Shell scripting best practices and conventions for bash, sh, zsh, and other shells'
applyTo: '**/*.sh'
---

# Shell Scripting Guidelines

Instructions for writing clean, safe, and maintainable shell scripts for bash, sh, zsh, and other shells.

## General Principles

- Generate code that is clean, simple, and concise
- Ensure scripts are easily readable and understandable
- Add comments where helpful for understanding how the script works
- Generate concise and simple echo outputs to provide execution status
- Avoid unnecessary echo output and excessive logging
- Use shellcheck for static analysis when available
- Assume scripts are for automation and testing rather than production systems unless specified otherwise
- Prefer safe expansions: double-quote variable references (`"$var"`), use `${var}` for clarity, and avoid `eval`
- Use modern Bash features (`[[ ]]`, `local`, arrays) when portability requirements allow; fall back to POSIX constructs only when needed
- Choose reliable parsers for structured data instead of ad-hoc text processing

## Error Handling & Safety

- Always enable `set -euo pipefail` to fail fast on errors, catch unset variables, and surface pipeline failures
- Validate all required parameters before execution
- Provide clear error messages with context
- Use `trap` to clean up temporary resources or handle unexpected exits when the script terminates
- Declare immutable values with `readonly` (or `declare -r`) to prevent accidental reassignment
- Use `mktemp` to create temporary files or directories safely and ensure they are removed in your cleanup handler

## Script Structure

- Start with a clear shebang: `#!/bin/bash` unless specified otherwise
- Include a header comment explaining the script's purpose
- Define default values for all variables at the top
- Use functions for reusable code blocks
- Create reusable functions instead of repeating similar blocks of code
- Keep the main execution flow clean and readable

## Working with JSON and YAML

- Prefer dedicated parsers (`jq` for JSON, `yq` for YAML—or `jq` on JSON converted via `yq`) over ad-hoc text processing with `grep`, `awk`, or shell string splitting
- When `jq`/`yq` are unavailable or not appropriate, choose the next most reliable parser available in your environment, and be explicit about how it should be used safely
- Validate that required fields exist and handle missing/invalid data paths explicitly (e.g., by checking `jq` exit status or using `// empty`)
- Quote jq/yq filters to prevent shell expansion and prefer `--raw-output` when you need plain strings
- Treat parser errors as fatal: combine with `set -euo pipefail` or test command success before using results
- Document parser dependencies at the top of the script and fail fast with a helpful message if `jq`/`yq` (or alternative tools) are required but not installed

```bash
#!/bin/bash

# ============================================================================
# Script Description Here
# ============================================================================

set -euo pipefail

cleanup() {
    # Remove temporary resources or perform other teardown steps as needed
    if [[ -n "${TEMP_DIR:-}" && -d "$TEMP_DIR" ]]; then
        rm -rf "$TEMP_DIR"
    fi
}

trap cleanup EXIT

# Default values
RESOURCE_GROUP=""
REQUIRED_PARAM=""
OPTIONAL_PARAM="default-value"
readonly SCRIPT_NAME="$(basename "$0")"

TEMP_DIR=""

# Functions
usage() {
    echo "Usage: $SCRIPT_NAME [OPTIONS]"
    echo "Options:"
    echo "  -g, --resource-group   Resource group (required)"
    echo "  -h, --help            Show this help"
    exit 0
}

validate_requirements() {
    if [[ -z "$RESOURCE_GROUP" ]]; then
        echo "Error: Resource group is required"
        exit 1
    fi
}

main() {
    validate_requirements

    TEMP_DIR="$(mktemp -d)"
    if [[ ! -d "$TEMP_DIR" ]]; then
        echo "Error: failed to create temporary directory" >&2
        exit 1
    fi
    
    echo "============================================================================"
    echo "Script Execution Started"
    echo "============================================================================"
    
    # Main logic here
    
    echo "============================================================================"
    echo "Script Execution Completed"
    echo "============================================================================"
}

# Parse arguments
while [[ $# -gt 0 ]]; do
    case $1 in
        -g|--resource-group)
            RESOURCE_GROUP="$2"
            shift 2
            ;;
        -h|--help)
            usage
            ;;
        *)
            echo "Unknown option: $1"
            exit 1
            ;;
    esac
done

# Execute main function
main "$@"

```

© github · MIT · github/awesome-copilot

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой