• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

sh: sql code will nicht in die Datenbank

Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
Ich versuche gerade seit geschlagenen anderthalbstunden nen ziemlich langes sql script in meine Datenbank zu kriegen.
Das mit dem LOAD DATA kann ich scheinbar nicht machen, weil der demon keine --infile Freigabe hat (soll er auch nicht erhalten). Über google bekomme ich nur solche Sachen oder umfangreiche PHP Scripts die das zu umgehen versuchen. Ich bin aber zu stur das über PHP zu machen. Solche Sachen müssen in einer Zeile mit der Shell gehen, verdammich! :mad:

Also hab ich halt probiert mir was zurecht zu tricksen:
Code:
egrep '.*' scriptfile.sql | mysql -u root -p -e
darauf bekomme ich die Fehlermeldung "-e braucht ein Argument" ich hab aber keine Ahnung wie ich das bei ner pipe zuweisen kann.
Wie mach ich denn so eine pipe richtig?

Also hab ich es mit ner Liste probiert:
Code:
mysql -u root -p -e `egrep '.*' scriptfile.sql`
hat er wieder ein problem mit, denn die Liste ist ihm zu lang.
Gibts denn keine Möglichkeit die Liste zu erweitern?

Ich bin jetzt am Ende von meinem Latein. *weiße Fahne* Bitte Hilfe!
 
Mitglied seit
02.09.2002
Beiträge
3.281
Reaktionen
106
Kann mangels sql installation nix testen, aber pack die befehle doch inne tempdatei und dann
Code:
source    (\.) Execute an SQL script file. Takes a file name as an argument.
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
sorry hab deine Antwort nicht gleich lesen können.

hab jetzt folgendes probiert und das ging:
Code:
mysql -u root -p db_name < scriptname.sql

Trotzdem würde ich gern noch ne grep variante hinbekommen (mit ner pipe).
Ich denke ich werde die Pipes nur mit Beispielen kapieren. Manchmal ruft man
a | b
auf und b bekommt das ergebnis von a als parameter und manchmal wieder nicht (wie in dem beispiel oben). Und ich versteh die Ursache dafür nicht. Deshalb kann ich nicht selbst erkennen, wann warum ein Pipe nicht geht. :8[:
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
also ich bin auch kein experte auf der shell, aber so wie ich pipes verstanden habe, sollte wenn das geht
Code:
mysql -u root -p db_name < scriptname.sql
auch das gehen:
Code:
cat scriptname.sql | mysql -u root -p db_name
 
Mitglied seit
03.08.2002
Beiträge
707
Reaktionen
0
p1 | p2 bedeutet doch nur stdout von p1 wird stdin von p2?
 
Mitglied seit
15.05.2003
Beiträge
11.307
Reaktionen
8
Ort
Fortuna 1895 Düsseldorf
das problem ist der punkt in dem ausdruck bei egrep:

man egrep:

. ein Punkt passt auf jeden Buchstaben außer auf das Zeilenende


das heisst er setzt die zeilen deines skripts hinterneinander.

aus

1.
2.
3.
4.
5.


wird

1.2.3.4.5.

weil egrep alle treffer AUSSER zeilenende findet und somit jeden treffer hinten dranhängt ohne newline. deshalb meckert er auch, dass die übergebene parameter liste zu lang ist
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
hab den Fehler begangen es aufm Mac nachzuschlagen.
Da liest man sich durch 100 Seiten bla bis man endlich da is:
The period . matches any single character.
was nicht unbedingt die gleiche Aussage ist. Aufm SuSE hab ich aber auch die Aussage gefinden, dass es auf alles außer Zeilenende zutrifft.

Ich bin aber nicht der Meinung, dass grep deshalb alles in eine Zeile packt. Wenn man einfach "egrep '.*' bla.sql" eingibt kommt jede Zeile für sich raus. Interpretieren würde ich das Ergebnis eher so, dass grep jede Zeile durchsucht, dort einen Match auf .* findet, die Zeile ausspuckt + NEWLINE, und dann in der nächsten Zeile weitersucht und wieder fündig wird. Wenn er nicht selbst ein NEWLINE an seinen Match anfügt, dann würdest du, wenn du nach "egrep 'function' *.php" suchst, ja auch alle while-Zeilen in eine Zeile zusammengepappt bekommen. Die gibt er aber auch schön untereinander aus.
 
Mitglied seit
15.05.2003
Beiträge
11.307
Reaktionen
8
Ort
Fortuna 1895 Düsseldorf
jo hast recht, grep such zeilenweise und gibt dann als treffer die gesamte zeile aus.

versch mal bitte nur den punkt:

grep '.' skript.sql


€: das ist auch unfug, weil kommt aufs selbe raus.
 
Mitglied seit
02.09.2002
Beiträge
3.281
Reaktionen
106
Code:
egrep 'function' *.php
Das hat mit egrep nix zu tun. An der Stelle übernimmt Bash das vervollständigen der Dateinamen und Bash verwendet nur wildcards, keine extended regexps.
Darum: Augen auf beim Eierkauf :hammer:
 
Oben