Выполнение запроса sqlite3 в bash - PullRequest
0 голосов
/ 13 декабря 2018

Выполнение в bash

sqlite3 database.db 'select * from databases'

дает хороший вывод, но, к сожалению, когда я хочу создать запрос из переменной sqlite3, не хочет сотрудничать.

Например:

cmd="select * from databases"
cmd1="sqlite3 database.db"
cmd2="'select * from databases'"
echo $($cmd1 \'$cmd\')
echo $($cmd1 '$cmd')
echo $($cmd1 $cmd)
echo $($cmd1 $cmd2)
echo `$cmd1 $cmd2`

Ничего из вышеперечисленного не работает.Я хотел бы иметь функцию, которая будет выполнять просто запрос, как "выбрать * из баз данных".

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Ваша проблема в разбиении слов .Когда вы запускаете это:

sqlite3 database.db $sql

Оболочка разбивает $sql на слова.Но sqlite3 ожидает команду SQL в качестве единственного параметра.Чтобы предотвратить разбиение слов, вы должны заключить $sql в двойные кавычки:

sqlite3 database.db "$sql"

Если вы хотите сохранить sqlite3 database.db в переменной с именем cmd, вы можете написать:

$cmd "$sql"

Оболочка разделится $cmd на слова, и в этом случае вы этого захотите.Вы хотите, чтобы оболочка увидела команду sqlite3 и другое слово database.db в качестве первого аргумента.Таким образом, мы не заключаем $cmd в двойные кавычки.

0 голосов
/ 14 декабря 2018

Давайте попробуем этот подход:

cmd1="sqlite3 database.db"
cmd2="select * from databases"
$cmd1 "$cmd2"

Я только что попробовал - у меня это работает: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...