Bash Kommando an Variabel übergeben und anzeigen

OP #4679367
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Moderator Persönliche Seite #4679386
Lesenswert?
• ▲
▼
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.
OP #4679458
Lesenswert?
• ▲
▼
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 #4682412
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren