Нейросеть для написания скриптов: Bash, PowerShell и Python
Модель быстро пишет скрипты для рутины, но запускать их вслепую нельзя. Показываем, как ставить задачу, требовать безопасный режим dry-run и проверять результат до запуска.
5 мин · · разработка · автоматизация
Нейросеть для написания скриптов хороша там, где задача понятна, а вспоминать синтаксис лень: перенести файлы по правилу, переименовать пачку, собрать отчёт из логов, раскидать данные по папкам. Модель выдаёт рабочий черновик за минуты. Опасность в другом: скрипт, который что-то удаляет или перезаписывает, при ошибке в одной строке может испортить данные. Ниже: как ставить задачу, чтобы получить безопасный код, как требовать режим dry-run, какие примеры на Bash, PowerShell и Python получаются и как проверять результат до запуска.
Нейросеть для написания скриптов: как ставить задачу
Расплывчатое «напиши скрипт для очистки логов» даёт скрипт под воображаемые условия. Хороший запрос содержит шесть частей:
- Среда. ОС и версия оболочки: «macOS 14, bash 3.2» или «Windows PowerShell 5.1», «Python 3.11».
- Задача. Что на входе и что нужно на выходе, с примерами имён файлов.
- Границы. Какие папки можно трогать, какие нельзя.
- Безопасность. Режим dry-run по умолчанию, реальные действия только с явным флагом.
- Поведение при ошибке. Остановиться или пропустить, что писать в журнал.
- Формат ответа. Один файл, без пояснений внутри кода, а после кода список мест, где скрипт меняет данные.
Пример готового запроса:
Напиши скрипт на Bash.
Среда: macOS 14 и Ubuntu 22.04.
Задача: в папке из первого аргумента найти файлы *.log старше N дней (N — второй аргумент,
по умолчанию 30) и перенести их в подпапку archive. Вложенные папки не трогать.
Ограничения: не использовать sudo, ничего не удалять, только переносить.
По умолчанию dry-run: печатать, что будет сделано. Реальный перенос только с флагом --apply.
Проверять аргументы, использовать set -euo pipefail, учитывать пробелы в именах файлов.
После кода перечисли команды, которые меняют файловую систему, и что может пойти не так.Последняя строка принципиальна: она заставляет модель самой назвать опасные места, и вы сверяете её список с кодом.
Bash: скрипт с dry-run
Вот результат такого запроса, доработанный и проверенный вручную:
#!/usr/bin/env bash
## Переносит .log старше N дней в подпапку archive. По умолчанию только показывает, что сделает.
set -euo pipefail
usage() { echo "Использование: $0 ПАПКА [ДНЕЙ] [--apply]" >&2; exit 1; }
DIR="${1:-}"; [[ -n "$DIR" ]] || usage
DAYS="${2:-30}"
APPLY="${3:-}"
[[ -d "$DIR" ]] || { echo "Нет такой папки: $DIR" >&2; exit 1; }
[[ "$DAYS" =~ ^[0-9]+$ ]] || usage
count=0Что здесь сделано правильно: -print0 и read -d '' выдерживают пробелы в именах, mv -- не путает имя файла с опцией, -maxdepth 1 не спускается во вложенные папки, а без флага --apply ничего не меняется. Запуск: ./cleanup.sh ~/logs 30, затем ./cleanup.sh ~/logs 30 --apply.
PowerShell: -WhatIf бесплатно
В PowerShell безопасный режим встроен: если скрипт объявлен с SupportsShouldProcess, он получает параметр -WhatIf, и вам не нужно писать dry-run самим.
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory)][string]$Path,
[int]$Days = 30
)
if (-not (Test-Path -LiteralPath $Path -PathType Container)) {
throw "Нет такой папки: $Path"
}
$limit = (Get-Date).AddDays(-$Days)
$archive = Join-Path $Path 'archive'
$old = Get-ChildItem -LiteralPath $Path -Filter '*.log' -File |Сначала запустите .\cleanup.ps1 -Path D:\logs -WhatIf, потом без -WhatIf. Если в скрипте есть кириллица, а вы используете Windows PowerShell 5.1, сохраняйте файл в UTF-8 с BOM, иначе строки могут прочитаться неверно. Об особенностях кириллицы и API-запросов из PowerShell написано в статье PowerShell и Claude API.
Python: argparse и явный флаг
import argparse
import shutil
import time
from pathlib import Path
def main() -> None:
parser = argparse.ArgumentParser(description="Переносит .log старше N дней в archive/")
parser.add_argument("folder", type=Path)
parser.add_argument("--days", type=int, default=30)
parser.add_argument("--apply", action="store_true", help="выполнить, без флага только показать")
args = parser.parse_args()
if not args.folder.is_dir():Python удобнее Bash, когда логика растёт: разбор дат, JSON, таблицы. На каком бы языке нейросеть ни писала код, принцип одинаков: явный флаг для действия и список затронутых файлов в выводе.
Как проверять скрипт перед запуском
- Прочитайте и попросите объяснить. Попросите модель пояснить построчно, какие команды меняют данные. Расхождение между её объяснением и вашим чтением кода — повод остановиться.
- Статический анализ. Для Bash —
shellcheck, для PowerShell — PSScriptAnalyzer, для Python —python -m py_compileи линтер вроде ruff. Они ловят пропущенные кавычки и опечатки. Эти инструменты ставятся отдельно, смотрите их документацию. - Тест на копии. Создайте временную папку с десятком файлов, воспроизводящих ваш случай, включая имена с пробелами и кириллицей.
- Dry-run на настоящих данных. Прочитайте вывод. Если в списке есть то, чего там быть не должно, остановитесь.
- Первый реальный запуск на небольшой выборке. И убедитесь, что есть копия или снимок данных.
- Опасные приметы. Ищите в коде
rm -rf,sudo,curl ... | bash,Remove-Item -Recurse -Force,chmod -R,find ... -delete, перенаправление>на существующий файл и неэкранированные переменные в путях. Увидели такое — требуйте от модели переписать без этого.
Если скрипт нужен прямо в проекте
Когда задача связана с репозиторием, удобнее агент в терминале: он видит структуру папок, сам создаёт файл, запускает его на тестовых данных и правит по ошибкам. Подключение описано в руководстве по Claude Code. Но оставьте подтверждение команд включённым: агент, запускающий свой же скрипт без вопросов, снимает с вас последнюю страховку. Для самостоятельных заготовок под запросы пригодится подборка промптов для программиста.
Если хотите получать черновики из своего кода, отправьте задачу в API и сохраните результат в файл, не запуская его автоматически:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key=os.environ["ZUKKO_API_KEY"],
)
task = open("task.txt", encoding="utf-8").read()
r = client.chat.completions.create(
model="claude-sonnet-5-5",
max_tokens=2000,
messages=[
{"role": "system", "content": "Отвечай кодом одного файла, без markdown-ограждений и пояснений."},
{"role": "user", "content": task},
],
)
open("draft_script.sh", "w", encoding="utf-8").write(r.choices[0].message.content)
print("Черновик сохранён в draft_script.sh. Прочитайте его перед запуском.")Это противоположная задача статье Bash, curl и jq: там скрипт вызывает модель, здесь модель пишет скрипт.
Сколько это стоит
Цены на 18 октября 2026, за 1M токенов. Запрос с описанием задачи около 1 500 токенов, скрипт с пояснениями около 1 200 токенов.
claude-sonnet-5-5(вход $0.4, выход $2): 1 500 × 0.4 / 1 000 000 + 1 200 × 2 / 1 000 000 = 0.0006 + 0.0024 = $0.003. Десять итераций правок, пусть каждая с 3 000 токенов входа: 10 × (3 000 × 0.4 + 1 200 × 2) / 1 000 000 = 10 × 0.0036 = $0.036.deepseek-v4.1-flash($0.013 / $0.038): 1 500 × 0.013 / 1 000 000 + 1 200 × 0.038 / 1 000 000 ≈ $0.00007 за запрос.
Скрипт стоит копейки. Цена ошибки в скрипте несопоставимо выше, поэтому не экономьте на проверке. Актуальные цены: GET https://api.zukko.pro/v1/models.
Частые вопросы
Какая модель лучше пишет скрипты?
Мы не утверждаем, что одна пишет лучше. Для коротких скриптов хватит недорогой модели, для сложной логики сравните две-три на одной задаче и проверьте результат тестами.
Можно ли запускать сгенерированный скрипт сразу?
Нет. Прочитайте, прогоните статический анализ, запустите в режиме dry-run и на копии данных. Это занимает минуты и спасает данные.
Как заставить модель не использовать опасные команды?
Запретите их явно в запросе: «без sudo, без rm, только перенос». Но это не заменяет проверки: модель может нарушить ограничение, поэтому ищите опасные команды в коде сами.
Как подключиться из России?
Для оплаты из России есть три способа: СБП, карты MasterCard и криптовалюта. Ключ создаётся в кабинете Zukko.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Перевод субтитров нейросетью: SRT без сбитых таймкодовГлавный риск при переводе SRT нейросетью — сломанная структура файла. Показываем схему, где таймкоды не попадают к модели, и скрипт на Python с проверкой.
- Редактирование текстов нейросетью: корректура, стиль и сокращениеРазные виды редактуры требуют разных промптов. Показываем формулировки для корректуры, стиля и сокращения, как получать правки с объяснением и не терять авторский голос.
- Dify в Docker: установка, первичная настройка и подключение моделейСтавим Dify через Docker Compose, создаём администратора и подключаем модели Claude, GPT и DeepSeek по одному ключу. Отдельно — что делать, если контейнеры не стартуют.
- Регулярные выражения нейросетью: как получить рабочий regex и проверить егоМодель пишет regex быстро, но уверенно ошибается на граничных случаях. Показываем запрос с примерами, цикл с автопроверкой и защиту от зависаний.