"mysql" konnte nicht ausgeführt werden: Keine solche Datei oder Verzeichnis mit Autoexpect

6381
Andrey Yasinishyn

Ich habe die folgende Datei: 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 

Ich mache es ausführbar durch sudo chmod +x script/year_changer/create_db.exp, aber wenn ich versuche, es auszuführen, bekomme ich einen Fehler:

couldn't execute "mysql": no such file or directory while executing "spawn mysql -h localhost -u root -p rootpass 'create database db_2011'" 
2
Was sagt "welche MySQL"? kann es sein, dass sich mysql nicht in deinem Weg befindet? Journeyman Geek vor 11 Jahren 0
@Journeyman Geek It's blank, but you are right, it isn't in my path. By typing mysql I reseive an error `mysql -bash: mysql: command not found`. So I need to add it to the path. Andrey Yasinishyn vor 11 Jahren 0
hm, das sollte normalerweise einen vollständigen Pfad geben, IIRC, ist es überhaupt installiert? Journeyman Geek vor 11 Jahren 0
Ja, so ist es. Ich habe Mysql Commans zu meinem Pfad hinzugefügt und es funktioniert. Andrey Yasinishyn vor 11 Jahren 0
Ich muss das Offensichtliche fragen ... Ist der MySQL-Client installiert? Joni vor 11 Jahren 1
Yes definitely. `sudo /usr/local/mysql/support-files/mysql.server restart Shutting down MySQL .. SUCCESS! Starting MySQL .... SUCCESS! ` Andrey Yasinishyn vor 11 Jahren 0
Befindet sich der `mysql`-Befehl in Ihrem` $ PATH`, wenn Sie das Skript ausführen? Barmar vor 11 Jahren 0
@Barmar. Weiß es nicht wirklich. Wie kann ich das überprüfen? Andrey Yasinishyn vor 11 Jahren 0
Was passiert, wenn Sie einfach `mysql` aus der Shell eingeben, anstatt das Skript auszuführen? Barmar vor 11 Jahren 1
`echo $ PATH` und sehen, ob es das Verzeichnis enthält, in dem die ausführbare Datei` mysql` installiert ist? Barmar vor 11 Jahren 0
Das ist der MySQL * Server *, den ich nach dem * Client * gefragt habe. Joni vor 11 Jahren 0
I'm sorry.. It's my mistake `mysql -bash: mysql: command not found` Andrey Yasinishyn vor 11 Jahren 0
Übrigens, da Sie das Passwort in der Befehlszeile angeben, werden Sie nicht zur Eingabe des Passworts aufgefordert. Daher sollten Sie nicht mit "password:" `rechnen. Barmar vor 11 Jahren 0
@Barmar. Kannst du deine Antwort als Antwort posten? Andrey Yasinishyn vor 11 Jahren 0
Ich habe keine Antwort gegeben, ich habe nur Fragen gestellt, was soll ich posten? Barmar vor 11 Jahren 0
@Barmar. Aber Ihre Frage war ein Hinweis auf die Lösung. Danke für die Hilfe. Andrey Yasinishyn vor 11 Jahren 0

2 Antworten auf die Frage

3
Journeyman Geek

Wenn Sie einen Befehl ohne vollständigen Pfad angeben, funktioniert er nur dann wirklich ohne Pfad zur ausführbaren Datei, wenn er sich in Ihren Pfadvariablen befindet. Gemäß den mysql-Dokumenten müssen Sie PATH=$:/usr/local/mysql/binIhren Pfad hinzufügen - in .bashrc für interaktive Shells oder .bash_profiles für non interaktive.

1
Shain Padmajan

Stellen Sie sicher, dass sich Ihre mysql-Binärdatei in Ihrer $ PATH-Variablen befindet. Sie können dies durch Ausführen überprüfen

echo $PATH; 

Wenn Sie den Pfad zu Ihrer mysql-Binärdatei dort nicht sehen, müssen Sie die PATH-Variable ändern und den Pfad zu Ihrer mysql-Binärdatei in der Datei ~ / .bash_profile oder ~ / .bash_rc hinzufügen, um sie bei der Anmeldung global verfügbar zu machen

Sie können alternativ den vollständigen Pfad zu Ihrer mysql-Binärdatei in Ihrem Code verwenden. Zum Beispiel

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