не удалось выполнить «mysql»: нет такого файла или каталога, используя autoexpect

6274
Andrey Yasinishyn

У меня есть следующий файл: exp.exp

#!/usr/bin/expect  db_host='localhost' db_name='webui_dev' db_user='root' db_pass='rootpass' new_db_name='db_2011'  expect <<EOF log_user 0 spawn mysql -h $db_host -u $db_user -p $db_pass 'create database $new_db_name' expect "password:" send "$db_pass\r" log_user 1 expect eof EOF 

Я делаю его исполняемым sudo chmod +x script/year_changer/create_db.exp, но если я пытаюсь выполнить его, я получаю сообщение об ошибке:

couldn't execute "mysql": no such file or directory while executing "spawn mysql -h localhost -u root -p rootpass 'create database db_2011'" 
2
что говорит "какой MySQL"? может быть, что MySQL не на вашем пути? Journeyman Geek 10 лет назад 0
@ Journeyman Geek Это пусто, но вы правы, это не на моем пути. Набирая mysql, я получаю сообщение об ошибке `mysql -bash: mysql: команда не найдена`. Поэтому мне нужно добавить его в путь. Andrey Yasinishyn 10 лет назад 0
хм, который обычно должен давать полный путь, IIRC, он вообще установлен? Journeyman Geek 10 лет назад 0
Да, это. Я добавил mysql commans на мой путь, и это работает. Andrey Yasinishyn 10 лет назад 0
Я должен спросить очевидное ... Клиент mysql установлен? Joni 10 лет назад 1
Определенно да. `sudo /usr/local/mysql/support-files/mysql.server restart Завершение работы MySQL .. УСПЕХ! Запуск MySQL .... УСПЕХА! ` Andrey Yasinishyn 10 лет назад 0
Есть ли команда `mysql` в вашем` $ PATH` при запуске скрипта? Barmar 10 лет назад 0
@Barmar. Не знаю на самом деле. Как я могу это проверить ?? Andrey Yasinishyn 10 лет назад 0
Что произойдет, если вы просто наберете `mysql` из оболочки вместо запуска скрипта? Barmar 10 лет назад 1
`echo $ PATH` и посмотрите, содержит ли он каталог, в котором установлен исполняемый файл mysql? Barmar 10 лет назад 0
Это сервер MySQL *, который я спросил о * клиенте *. Joni 10 лет назад 0
Я извиняюсь .. Это моя ошибка `mysql -bash: mysql: команда не найдена` Andrey Yasinishyn 10 лет назад 0
Кстати, так как вы указываете пароль в командной строке, он не будет запрашивать пароль, поэтому вы не должны "ожидать" пароль: "`. Barmar 10 лет назад 0
@Barmar. Можете ли вы опубликовать ответ как ответ? Andrey Yasinishyn 10 лет назад 0
Я не дал ответа, я только задавал вопросы, что я должен написать? Barmar 10 лет назад 0
@Barmar. Но ваш вопрос был ключом к решению. Спасибо за помощь. Andrey Yasinishyn 10 лет назад 0

2 ответа на вопрос

3
Journeyman Geek

Предоставление команды без полного пути действительно работает без пути к исполняемому файлу, только если его в ваших переменных пути - согласно документам mysql, вам нужно добавить PATH=$:/usr/local/mysql/binк своему пути - в .bashrc для интерактивных оболочек или .bash_profiles для не интерактивные.

1
Shain Padmajan

Убедитесь, что ваш двоичный файл mysql находится в переменной $ PATH. Вы можете проверить это, выполнив

echo $PATH; 

Если вы не видите путь к вашему двоичному файлу mysql, вам придется изменить переменную PATH и добавить путь к вашему двоичному файлу mysql в файле ~ / .bash_profile или ~ / .bash_rc, чтобы сделать его доступным глобально при входе в систему.

В качестве альтернативы вы можете использовать полный путь к вашему бинарному файлу mysql в вашем коде. Например

spawn /usr/bin/mysql -h $db_host -u $db_user -p $db_pass 'create database $new_db_name' 

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