2

У меня есть следующий файл: 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 ответа2

3

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

1

Убедитесь, что ваш двоичный файл 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'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .