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.
Gast
#4679412
Ü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...
Gast
#4679580
Rejocktana M. schrieb: > candata= `cangen vcan0 -g 0.008 -I 7E -L 8 -D r -v` > echo $candata Ohne Leerzeichen!
1 | |
oder
1 | |
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 | |
Gast
#4682412
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 | |
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
