Pageferry
Рабочие процессы

Запуск Bash-скрипта: от открытия папки до кода выхода

03
Запуск скрипта

Запуск Bash-скрипта с аргументами в WSL или по SSH

Bash-скрипт можно запустить тремя способами: bash script.sh arg1 arg2, ./script.sh после chmod +x (это работает благодаря строке shebang) или через встроенную команду exec, которая заменяет оболочку и никогда не возвращает управление. Первый вариант проще для начала, так как не требует изменения прав доступа. Shell выполняет команду в выбранной вами среде, будь то WSL на вашем ПК или Linux-система, к которой вы подключены по SSH, а карточка в чате показывает реальный вывод и код выхода. Вы сами выбираете аргументы, поэтому можете протестировать и нормальный сценарий, и сбой в одном разговоре. Часто спрашивают, какой вариант выбрать: используйте bash script.sh во время тестирования, так как он работает даже если у файла нет права на выполнение, и переключитесь на ./script.sh, когда скрипт будет готов и начинаться со строки shebang. Независимо от выбранного варианта, статус выхода — это одно и то же число от 0 до 255, и 0 всегда означает успешное завершение скрипта.

01

Откройте папку

Выберите папку со скриптом в качестве рабочей; файловые инструменты, такие как read_file и grep, работают внутри неё. Файловые инструменты работают в этой папке, тогда как Shell, веб-инструменты и SSH не ограничены ею.

02

Выберите режим подтверждения

Используйте Ask first, чтобы видеть каждое изменение как diff, или Plan only, чтобы сначала прочитать план. Auto-run действует немедленно. Ask first приостанавливается только перед действиями, которые что-то изменяют.

03

Запросите запуск

Опишите запуск простыми словами, например: запустите скрипт с аргументом test. Укажите WSL или ваш сервер, если у вас есть оба. Назовите скрипт и его аргументы точно.

04

Прочитайте результат

Откройте карточку, чтобы увидеть вывод и реальный код выхода, затем примите или отклоните любое изменение. Не нулевое число — это информация. Запустите его снова после каждого принятого изменения. Сравните его с ожидаемым результатом.

Небольшой пример скрипта

greet.sh
#!/usr/bin/env bash
# greet.sh - print a greeting a few times
set -eu
if [ "$#" -lt 1 ]; then
  echo "Usage: $0 NAME [COUNT]" >&2
  exit 2
fi
name="$1"
count="${2:-1}"
for i in $(seq 1 "$count"); do
  echo "Hello, $name ($i)"
done
exit 0

greet.sh завершается со строкой использования и кодом выхода 2, когда имя отсутствует, принимает необязательный счётчик со значением по умолчанию 1 и выводит приветствия только в цикле. Прочитайте его перед запуском: здесь нет sudo, нет загрузки и ничего, что перемещает или удаляет файлы, поэтому его безопасно тестировать на любой машине, которой вы владеете. По строкам: shebang указывает интерпретатор, set -eu останавливает выполнение при ошибках и неинициализированных переменных, проверка $# считает аргументы, а цикл for только выводит сообщения.

Запуск скрипта за четыре небольших шага

Создайте файл скрипта

Начните с пустой рабочей папки. Попросите агента написать приведённый выше пример, и write_file создаст greet.sh в этой папке. Откройте карточку и прочитайте файл по строкам: первая строка — это shebang, указывающий интерпретатор, set -eu останавливает скрипт при ошибках и неинициализированных переменных, а проверка $# защищает остальную часть от отсутствия имени. В режиме Ask first новый файл ждёт вашего подтверждения перед записью. Пока ничего не запущено. Ветвь usage этого скрипта выбирает 2 для неправильного использования, что является распространённой конвенцией. Примите файл только тогда, когда поймёте каждую строку, и если нет, попросите агента объяснить её. Отклонённое изменение оставляет папку неизменной.

Запустите его и прочитайте код выхода

Люди, которые ищут «bash execute script», обычно хотят одну строку: bash greet.sh test. Попросите агента запустить его, и Shell запускает команду в среде вашего чата, например WSL, и возвращает реальный вывод и реальный код выхода. Раскройте карточку для полного вывода. Затем запросите тот же запуск без аргумента, и вы должны увидеть строку использования и код выхода 2. Код выхода для приложений командной строки — это число от 0 до 255, которое читает вызывающая сторона, и 0 означает успех. Код выхода 127 означает, что команда не найдена, а 126 означает, что файл нельзя выполнить, поэтому эти два числа указывают на опечатку, отсутствующую программу или отсутствие права на выполнение.

Прочитайте аргументы внутри скрипта

read_file показывает скрипт, а grep находит, где используются $1 и $2, так что вы можете проверить, имеет ли каждый аргумент значение по умолчанию или сообщение об ошибке. Вот как разбирать необязательные аргументы: скрипт циклически обрабатывает их с помощью getopts, и при наличии только одного или двух значений достаточно plain $1 и ${2:-1}. Алиасы с аргументами ведут себя не как функции, потому что алиас только заменяет введённое слово текстом, поэтому используйте функцию, когда значения должны находиться в середине. Попросите агента изменить одну вещь, например значение по умолчанию для счётчика, и прочитайте diff, который показывает edit_file. Затем запустите скрипт снова и сравните новый код выхода со старым. Plan only может перечислить параметры, которые понимает скрипт, без запуска чего-либо.

Запустите тот же скрипт на сервере, которым вы владеете

Те же шаги работают, когда рабочая среда — это Linux-система, которой вы владеете, к которой вы подключены по SSH. Файловые инструменты продолжают работать в рабочей папке чата, тогда как команды Shell выполняются в выбранной вами среде, поэтому проверяйте, на какую ссылку указывает карточка. Встроенная команда exec, которую люди ищут как «bash exec script», заменяет оболочку другой командой и никогда не возвращает управление, поэтому ничего после неё не выполняется, а код выхода — это код новой команды. Сохраните копию перед тем, как скрипт переместит или удалит файлы, запустите его сначала с echo как пробный запуск и используйте только машины, которыми вам разрешено администрировать. Прочитайте финальную карточку перед тем, как закрыть чат. Когда вы передаёте все значения другой команде, пишите "$@" в двойных кавычках, чтобы каждое значение сохранило свою форму.

Pageferry для Windows

Протестируйте Bash-скрипт на своей машине

Скачать Pageferry ↗