Ошибка при выполнении команды в bash - PullRequest
2 голосов
/ 04 мая 2011

При выполнении эха в bash-скрипте, например:

(echo mysql --host=${host} --user=${user} --password=${password} ${database} '<'  '${i// /\\ }' )

Я получаю "правильную" строку, отраженную в терминале ... однако, когда я удаляю эхо, я получаю ошибки MySQL. Проблема в том, что я не могу точно увидеть, что отправляется в mysql, но, похоже, это отличается от того, что я вижу, когда делаю эхо ... какие-нибудь идеи?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Если это в скрипте bash, измените первую строку на

#!/bin/bash -x

Это выполнит скрипт в режиме отладки и позволит вам увидеть раскрытие всех переменных.

Перенаправление ввода '<' не должно быть в кавычках, равно как и входной источник. Даже без кавычек я не думаю, что источник ввода расширится до того, что вы хотите. </p>

Попробуйте создать исходную строку ввода перед ее использованием в команде mysql.

declare input=${i// /\\ }

Использовать eval

eval mysql --host=${host} --user=${user} --password=${password} ${database} < ${input}

eval развернет все переменные перед попыткой выполнения команды.

2 голосов
/ 04 мая 2011

Полагаю, вы должны удалить одинарные кавычки вокруг < и ${i// /\\ } при попытке выполнить команду. При выполнении вы должны рассматривать их как соответствующие токены, а не только как строки.

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