Hallo, ich bin neu in der Skrip-Programmierung in Linux(Raspbian). Ich möchte die Ausgabe eines Kommandos (cangen) in eine Variabel speichern und spätter in meinem Skript verarbeiten. Mit dem Befehl "cangen" generiere ich anhand eines virtuellen CAN-Bus-Interface CAN-Bus Daten. Diese Daten möchte ich immer in einer Variabel speichern. Normalerweise bekomme ich solche Daten, wenn ich den Befehl ausführe(Anhang): Befehl: cangen vcan0 -g 4 -I 7E -L 8 -D r -v Ausgabe:http: http://www.bilder-upload.eu/show.php?file=0263db-1470922561.jpg Nun möchte folgender Skript, die Ausgabe des Befehls in einer Variabel speichern: #!/bin/bash #We have to generate a virtual CAN bus Interface sudo modprobe vcan sudo ip link add dev vcan0 type vcan sudo ip link set up vcan0 candata= `cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v` echo $candata Leider bekomme ich keine Ausgabe. ich bekomme nur die Nachricht: RTNETLINK answers: File exists Ich habe nicht sehr viel Erfahrung in Python und die Programmierung mit Skript in Linux, deswegen wollte ich mal hier fragen, ob jemand mir helfen könnte meine Herausforderung zu lösen. Danke
Rejocktana M. schrieb: > Leider bekomme ich keine Ausgabe. ich bekomme nur die Nachricht: > > RTNETLINK answers: File exists Dann stelle fest, welcher Befehl im Script den Fehler produziert. Starte das Script mit sh -x script-name.sh Dann wird Dir jeder einzelne Befehl darin angezeigt. Ich vermute mal, dass es einer der beiden "ip up"-Befehle ist, welcher den Fehler produziert. > candata= `cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v` > echo $candata Wenn ich es richtig sehe, erzeugt cangen mehrzeiligen Output? Dann solltest Du echo "$candata" verwenden, um Zeilenumbrüche und andere Whitespaces 1:1 zu erhalten. Sonst klatscht Dir echo einfach alles hintereinander.
:
Bearbeitet durch Moderator
Übrigens, es heisst "Variable", nicht "Variabel".
Frank M. schrieb: > Rejocktana M. schrieb: > Dann stelle fest, welcher Befehl im Script den Fehler produziert. > > Starte das Script mit > > sh -x script-name.sh > > Dann wird Dir jeder einzelne Befehl darin angezeigt. Ich vermute mal, > dass es einer der beiden "ip up"-Befehle ist, welcher den Fehler > produziert. Du hattest recht, der Befehl: ip link add dev vcan0 type Vcan ist es. Ich habe mein Raspberry Pi neugestartet und den Scrip neugestartet, dann bekam ich beim ersten Aufruf des Scripts keine Meldung. Die Daten werden zwar nicht dargestellt aber es ist schon mal ein Vorschritt für mich, danke. Ich vermute, dass dieser Befehl einmal ausgeführt werden muss, um das CAN-Interface zu bilden, dann darf man den Befehl nicht mehr ausführen. Es sei denn man startet das System neu. Irgendwie schaft es die Konsole nicht, die Daten auszugeben...
Rejocktana M. schrieb: > candata= `cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v` > echo $candata Ohne Leerzeichen!
1 | candata=`cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v` |
oder
1 | candata=$(cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v) |
Dann sollte es auch funktionieren.
Norbert schrieb: > candata=$(cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v) Ich würde noch Anfürungszeichen dazu tun:
1 | candata="$(cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v)" |
Daniel A. schrieb: > Norbert schrieb: >> candata=$(cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v) > > Ich würde noch Anfürungszeichen dazu tun: > >
1 | candata="$(cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v)" |
Warum? Oder genauer, warum bei der Zuweisung? Alle Daten welche 'cangen' auf stdout schreibt, gehen in die variable 'candata'. Bei der Nutzung von 'candata' hinterher sind Anführungszeichen sicherlich sinnvoll, da können sonst Blanks u.ä. problematisch sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.