Сценарий Bash приостанавливается после открытия mysql

Я пытаюсь написать сценарий, который будет обслуживать наш сервер Ubuntu для тех, кто еще меньше разбирается в Linux, чем я.

Когда я запускаю сценарий от имени администратора (необходим для доступа к mysql), он запрашивает у меня правильный пароль, команда mysql запускается успешно, но следующие команды не запускаются. Терминал просто сидит и не продолжает работу и не дает сбоя.

Любая идея, что я делаю неправильно, будет очень кстати. Я провел небольшое исследование, но никаких решений для Google не появилось.

#! /bin/sh
mysql -p fog

DELETE FROM `hosts` WHERE `hostID` = '0';
#more DELETE commands in here, removed for brevity
DELETE FROM tasks WHERE taskTypeId=8;

$Shell
1
задан 29 June 2021 в 16:37

2 ответа

Команда mysql ожидает чтения команд со стандартного ввода. Вы можете обеспечить это в сценарии, используя here document:

#! /bin/sh

mysql -p fog <<'EOF'
DELETE FROM 'hosts' WHERE 'hostID' = '0';
#more DELETE commands in here, removed for brevity
DELETE FROM tasks WHERE taskTypeId=8;
EOF

Управление вернется в оболочку после выхода команды mysql. Цитирование первого 'EOF' (или также \EOF или "EOF") не позволяет оболочке расширить содержимое - это не проблема для команд в вашем примере, но что-то вроде SELECT * FROM иначе расширит * до списка файлов. Фактическая строка EOF является произвольной.

0
ответ дан 28 July 2021 в 11:23

Другая возможность - создать 2 файла: один для ваш сценарий bash (скажем mybash , другой для команд SQL ( mydeletes.sql ):

mybash

#! /bin/sh

mysql -p fog <<mydeletes.sql

mydeletes.sql

DELETE FROM 'hosts' WHERE 'hostID' = '0';
#more DELETE commands in here, removed for brevity
DELETE FROM tasks WHERE taskTypeId=8;

Это разделит код SQL из кода bash. Это позволит вам загружать, выполнять и отлаживать ваш SQL-скрипт во многих (если не во всех) инструментах SQL (DBeaver, Workbench, ...)

0
ответ дан 28 July 2021 в 11:23

Другие вопросы по тегам:

Похожие вопросы: