Forum: PC-Programmierung RS232 Befehl unter Linux


von Jens (Gast)


Lesenswert?

Hallo,
da ich keine Ahnung von Programmierung habe und es (nach 3 Monaten 
erfolglosen Eigenrecherchen) dank eurer Hilfe innerhalb eines Tages 
geschafft habe meinen Projektor über eine Batch datei zu starten bitte 
ich euch hier nochmal um Hilfe.

A)Ich habe einen PC mit Win 10 per ConLine-V24-XXL-S Serial LAN Device 
Server Netzwerkadapter an meinen Beamer angeschlossen (Virtual COM1).

B) Ich habe ein Odroid C2 mit Linux per ConLine-V24-XXL-S Serial LAN 
Device Server Netzwerkadapter an meinen Beamer angeschlossen (Virtual 
COM1)


Die batch Datei sieht also so aus:
@echo off
mode com1: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off xon=off odsr=off 
octs=off dtr=off rts=off idsr=off
type C:\Beamer\beamer_On.hex > COM1

in der beamer_On.hex steht: PON (STXPONETX)

Das funktioniert mit Windows 10 super.

Im Zuge meiner Automatisierung müsste ich diesen Befehl aber über den 
Odroid und nicht den PC senden. Ich habe gelesen das ich dazu eine bash 
Datei benötige, weil die Batch Datei nicht auf Linux ausführbar ist?

Aber wie hat diese auszusehen? Ich kann wahrscheinlich nicht den Inhalt 
der Batch einfach unter .sh abspeichern oder?
Habe auch schon diverse Recherchen angestellt aber werde aus diesen 
dingern einfach nicht schlau.

Sorry für die Unwissenheit aber vielleicht könnt ihr mich ja aufklären.

Danke schon mal im Voraus.

von J. S. (Gast)


Lesenswert?

Das ist richtig, die verwendeten Befehle und die Syntax sind 
unterschiedlich. Wie sieht denn deine .bat aus?

von Thorsten (Gast)


Lesenswert?

"stty" statt "mode" und "cat" statt "type". Die Details findest Du in 
der entsprechenden man-Page

von nicht"Gast" (Gast)


Lesenswert?

Moin,

1
#!/bin/sh
2
3
stty -F /dev/ttyUSB1 9600 raw -echo -ixon -ixoff
4
5
cat beamer_On.hex >/dev/ttyUSB1

Nur so als Vorlage. Den seriellen Port must du natürlich anpassen und 
die beamer_On.hex muss im gleichen Verzeichnis wie das Script liegen.

wichtig ist, dass der Benutzer in der Gruppe dialout ist. Sonst gibts 
Probleme.

Beitrag #5149593 wurde vom Autor gelöscht.
von Yalu X. (yalu) (Moderator)


Lesenswert?

Für Linux scheint es keine Virtual-COM-Software zu geben (zumindest
nicht vom Hersteller des Interfaces). Wenn für das Interface aber
TCPSERVER mit Port 1002 als Emulation für die serielle Schnittstelle
konfiguriert ist, sollte ein einfaches

1
echo -ne '\x02PON\x03' > /dev/tcp/192.168.100.100/1002

zum Senden des Einschaltbefehls genügen. Ggf. musst du in der obigen
Befehlszeile 192.168.100.100 durch die tatsächlich konfigurierte
IP-Adressee des Interfaces ersetzen.

Die Einstellung der RS-232-Parameter wie Baudrate, Datenbits usw. musst
du mittels Telnet direkt auf dem Interface (s. Handbuch) vornehmen. Es
sieht aber so aus, dass 9600,8,N,1 die Defaulteinstellung ist, so dass
du hier nichts ändern musst.

von Dirk B. (dirkb2)


Lesenswert?

Unter linux gibt es auch das Tool netcat, dass solche sachen etwas 
vereinfacht.
Es wird mit der Abkürzung nc aufgerufen.

nc name port < dateiname

für das Beispiel von yalu:

nc 192.168.100.100 1002 < beamer_On.hex

(Es muss nicht die IP-Adresse sein, man kann auch den DNS-Namen der 
Geräte nehmen)

von Jens (Gast)


Lesenswert?

Hallo,
Vielen Dank für die schnellen vielen Antworten. Werde es heute Abend 
gleich mal ausprobieren.

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Wahrscheinlich hatte ich wohl einen Fehler in meiner Beschreibung 
gemacht oder einen Denkfehler in der Umsetzung und in der 
Problembeschreibung wie auch immer.

Der PC (Win 10) hat einen virtuellen COM1 und kann per Batch datei den 
Befehl auslösen s.o.

Ich möchte den Befehl aber über den Odroid C2 (Linux) mit einem 
bestimmten Programm absetzen s.o.

Das Programm kann folgende Protokolle, Befehle...(siehe angehängtes 
Bild)

Diese Befehle werden mit einer sogenannten .cvaction Datei ausgelöst.

Da mein Linux MiniPC ja keinen virtuellen Com1 hatte ich mir überlegt 
das es nur 2 Möglichkeiten gibt den Befehl abzusetzen (da ich kein 
Experte bin kann das natürlich falsch sein):

1.Einen Befehl vom Linux MiniPc an den Win PC senden, damit der Win PC 
die Batch datei ausführt und dann den Befehll an COM1 (Beamer)sendet. 
Dies geht aber nicht über das ausführen einer Konsole unter Linux 
sondern über die Commands: siehe Bild

2.Den Befehl direkt an den ConLine-V24-XXL-S Serial LAN Device
Server Netzwerkadapter senden. Wenn ich das jetzt richtig deute müsste 
ich das Beispiel von Yalu X.: "echo -ne '\x02PON\x03' > 
/dev/tcp/192.168.100.100/1002" in ein pyhton script schreiben, damit das 
Programm den Befehl direkt senden kann.

Aber ich kann kein pyhton script schreiben und weis auch nicht ob ich 
richtig liege?
Hoffe ich kann dieses unlösbare Problem mit eurer Hilfe lösen.
Danke euch, dieses Forum ist wirklich nur weiterzuempfehlen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jens schrieb:
> Wenn ich das jetzt richtig deute müsste ich das Beispiel von Yalu X.:
> "echo -ne '\x02PON\x03' > /dev/tcp/192.168.100.100/1002" in ein pyhton
> script schreiben, damit das Programm den Befehl direkt senden kann.

Nein, du brauchst dafür kein Python-, sondern ein Bash-Skript. Zum
Testen kannst du diesen Befehl auch einfach in der Konsole eintippen.

Ich selber konnte das nicht testen, weil ich diesen ConLine-Adapter
nicht habe. Aber laut den Informationen in dessen Handbuch müsste es so
oder so ähnlich gehen.

von Jens (Gast)


Lesenswert?

Hab den Befehl zum testen direkt in die Konsole eingegeben.
Bekomme folgende Fehlermeldung:
-sh. can´t create /dev/tcp/192.168.188.52/1002: nonexisting directory
-sh: -sh:: not found

Was könnte das bedeuten?

von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

> -sh. can´t create /dev/tcp/192.168.188.52/1002: nonexisting directory
> -sh: -sh:: not found
>
> Was könnte das bedeuten?

Es könnte sein, dass eine der Verzeichnisstufen
/dev
/dev/tcp
/dev/tcp/192.168.188.52
nicht existiert, und darum die Datei
/dev/tcp/192.168.188.52/1002
nicht angelegt werden kann.

von Jens (Gast)


Lesenswert?

okay, kann ich die irgendwie anlegen oder gibt es eine andere 
Möglichkeit?

von A.H. (Gast)


Lesenswert?

Jens schrieb:
> Hab den Befehl zum testen direkt in die Konsole eingegeben.
> Bekomme folgende Fehlermeldung:
> -sh. can´t create /dev/tcp/192.168.188.52/1002: nonexisting directory
> -sh: -sh:: not found
>
> Was könnte das bedeuten?

Filenamen wie "/dev/tcp/192.168.188.52/1002" existieren nicht wirklich 
sondern werden von der Bash-Shell speziell ausgewertet. Der "-sh" 
bedeutet aber, dass das nur eine Standard-Shell ist. Das anlegen von 
Verzeichnissen nutzt also nichts, das Verwenden von netcat (wie oben 
beschrieben) schon.

von Jens (Gast)


Lesenswert?

so richtig verstehe ich das leider nicht. Bedeutet das, das ich den 
Befehl ändern muss? Kann man das irgendwie testen?

von Yalu X. (yalu) (Moderator)


Lesenswert?

A.H. schrieb:
> Filenamen wie "/dev/tcp/192.168.188.52/1002" existieren nicht wirklich
> sondern werden von der Bash-Shell speziell ausgewertet.

Ich dachte, auf dem Raspberry läuft normalerweise eine normale Bash.
Offensichtlich ist dies hier nicht der Fall. Also entweder vorher eine
Bash mit

1
bash

starten oder, falls netcat installiert ist,

1
echo -ne '\x02PON\x03' | nc 192.168.100.100 1002

bzw.

1
echo -ne '\x02PON\x03' | netcat 192.168.100.100 1002

versuchen.

von Jens (Gast)


Lesenswert?

ich kann die bash datei mit "./ bash_datei.sh" öffnen.
Dann bekomme ich folgende Fehlermeldung:
./ bash_datei.sh line 1: can´t create: /dev/tcp/192.168.188.52/1002: 
nonexisting directory

Meine bash sieht so aus:
echo -ne '\x02PON\x03' > /dev/tcp/192.168.188.31/57195

also unter .sh gespeichert.

Ich könnte mir vorstellen, das sie so ähnlich aussehen müsste:

#!/bin/sh

echo -ne '\x02PON\x03' > /dev/tcp/192.168.188.31/57195

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jens schrieb:
> ich kann die bash datei mit "./ bash_datei.sh" öffnen.

Du solltest bash und batch auseinanderhalten.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jens schrieb:
> ich kann die bash datei mit "./ bash_datei.sh" öffnen.

Deine Default-Shell ist, wie schon oben deutlich wurde, nicht die Bash
(oder allenfalls eine im restricted Mode). Du musst also explizit
angeben, dass das Skript bzw. der Befehl durch die Bash ausgeführt
werden soll.

Als Skript:

1
bash bash_datei.sh


Als direkter Befehl:

1
bash -c "echo -ne '\x02PON\x03' > /dev/tcp/192.168.188.31/57195"

Hast du die Alternativen mit netcat schon ausprobiert? Die sollten in
jeder Shell funktionieren.

von Tux (Gast)


Lesenswert?

Da du das Skript über ./skript.sh startest einfach in der die erste 
Zeile "#!/bin/bash" schreiben (ohne die "").

von Jens (Gast)


Lesenswert?

Mega, dieser Befehl hat super im Terminal funktioniert "echo -ne 
'\x02PON\x03' | nc 192.168.100.100 1002"
Also direkt abgesetzt.

Vielen Dank!!!!

Jetzt muss ich das Ganze aber über ein bash script ans laufen bringen um 
mit meinem Programm den Befehl absetzen zu können.

Es tut mir wirklich leid und ich möchte nicht nerven aber könnte mir 
einer nochmal sagen wie das bash Skript mit dem Befehl auszusehen hat?
Wäre echt toll. Sorry

In meinem Skript steht:
#!/bin/bash
echo -ne '\x02PON\x03' | nc 192.168.188.52 1002

gespeichert unter datei.sh

aufgerufen im Terminal unter bash datei.sh

Leider tut sich da nix.

von Martin H. (horo)


Lesenswert?

Jens schrieb:
> Mega, dieser Befehl hat super im Terminal funktioniert "echo -ne
> '\x02PON\x03' | nc 192.168.100.100 1002"
> Also direkt abgesetzt.
> ...
> In meinem Skript steht:
> #!/bin/bash
> echo -ne '\x02PON\x03' | nc 192.168.188.52 1002
> ...
> Leider tut sich da nix.

Ist der Unterschied beabsichtigt?
192.168.100.100 vs. 192.168.188.52

von Jens (Gast)


Lesenswert?

Oh nein blöder Fehler von mir.In beiden Fällen ist:
"echo -ne '\x02PON\x03' | nc 192.168.188.52 1002" der richtige Befehl.
Hab mich jetzt nur hier verschrieben

von Günter Lenz (Gast)


Lesenswert?

Jens schrieb:
>aufgerufen im Terminal unter bash datei.sh

>Leider tut sich da nix.

Wenn man bei Linux ein Programm im aktuellen Ordner
starten möchte, und dieser Ordner sich nicht im
Programmsuchpfad befindet, muß man glaube ich ./
davor setzen. Also:

./datei.sh

Vielleicht liegt es daran?

von Jens (Gast)


Lesenswert?

Hab ich auch schon probiert geht leider auch nicht

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Wenn sich 'nix tut' heißt Das normaler Weise, daß kein Fehler auftrat.
Kannst Du statt dem nc-Aufruf 'tee' in den Script schreiben?
'tee' gibt das Übergebene auf der Komandozeile wieder aus - vll. werden 
nicht alle Argumente übergeben, vll. musst Du weiter Quoten 
(Anführungsstriche)?

Aka nc '12.34.56.78 1002'

MfG

man tee
NAME
       tee - read from standard input and write to standard output and 
files
....

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Patrick J. schrieb:
> Kannst Du statt dem nc-Aufruf 'tee' in den Script schreiben?

Nicht statt, sondern zusätzlich, nämlich:
1
echo -ne '\x02PON\x03' | tee /tmp/datei.log | nc IPADRESSE-HIER 1002

Wenn Du tatsächlich "statt" meintest, kannst Du direkt schreiben:
echo -ne '\x02PON\x03' >/tmp/datei.log


Außerdem empfiehlt sich ein
1
bash -x skript.sh

Dann sieht man, was ausgeführt wird.

Hat man einmal die Datei datei.log, kann man natürlich auch schreiben:

nc IPADRESSE-HIER 1002 < /tmp/datei.log

Hier empfiehlt sich dann aber, die Datei woanders hinzulegen, sonst 
könnte sie einen Reboot nicht überstehen.

: Bearbeitet durch Moderator
von Jens (Gast)


Lesenswert?

Das wars danke euch allen :-)

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Jens schrieb:
> Das wars danke euch allen :-)

Führt jetzt 'tee' Deine Anweisung aus, oder wie darf ich Deine 
Erfolgsmeldung interpretieren?

MfG

von Jens (Gast)


Lesenswert?

Ja genau

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

An tee kanns aber nicht liegen. Das gibt lediglich die Standard-Eingabe 
an die Standard-Ausgabe weiter und protokolliert zusätzlich sämtliche 
Daten in einer Ausgabedatei.

von Jens (Gast)


Lesenswert?

Noch nicht ganz am Ziel.
Hatte gedacht jetzt bekomme ich den Rest hin aber Pustkuchen :-(

Also kurz zusammengefasst:
1) Das .sh Skript "beameron.sh" ist in dem  Pfad "storage/downloads"
2) Befinde ich mich in dem Pfad Downloads und gebe: "bash -x 
beameron.sh"  in den Terminal geht mein Beamer an.

So jetzt will ich aber wie gesagt mit dem Programm Cinemavision den 
Befehl auslösen.
Das sollte ungefähr so aussehen: 
command:///storage/downloads/beameron.sh
Leider funktioniert das nicht.

Gebe ich das direkt in den Terminal: /storage/downloads/beameron.sh
Öffnet sich das file auch nicht.

Ich denke der Fehler liegt irgendwo bei: 
command:///storage/downloads/beameron.sh

Denn im Terminal unter dem Pfad Downloads mit dem Befehl: "bash -x 
beameron.sh" funktioniert es ja???????

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jens schrieb:
> Das sollte ungefähr so aussehen:
> command:///storage/downloads/beameron.sh

Probier doch mal
1
command:bash -x ///storage/downloads/beameron.sh

von Daniel A. (daniel-a)


Lesenswert?

Eventuell das Script ausführbar machen?
1
chmod +x /storage/downloads/beameron.sh

von Jens (Gast)


Lesenswert?

chmod +x /storage/downloads/beameron.sh habe ich schon gemacht.
Wenn ich command:bash -x ///storage/downloads/beameron.sh in Putty 
schreibe bekomme ich command:bash not found, gebe ich bash -x 
///storage/downloads/beameron.sh in Putty ein dann funktioniert es.

command:bash -x ///storage/downloads/beameron.sh in dem Programm 
Cinemavision funktioniert leider auch nicht.

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Terminal

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Versuche mal
1
./beameron.sh

von Jens (Gast)


Lesenswert?

./beameron.sh
Antwort vom Teminal not found.
Sowas gibt es doch nicht

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Das dann aus dem Download-Verzeichnis heraus.
Von 'Außerhalb' den Punkt auch vor die Pfadangabe.
Ist der Script definitiv ausführbar?
Wobei das chmod -x ja keine Fehlermeldung auswarf, sollte Das gepasst 
haben.

MfG

von Jens (Gast)


Lesenswert?

Ja das Script ist ausführbar das ist ja das verrückte. Habe das Script 
im Terminal (um sicher zu gehen) mehr als einmal ausgeführt.

von JJ (Gast)


Lesenswert?

Ich vermute, dein Cinemavision läuft unter einem anderen User.
gib mal bitte die folgenden Kommandos in der Shell ein:

chmod a+rx /storage
chmod a+rx /storage/downloads
chmod a+rx /storage/downloads/beameron.sh

in Cinemavision sollte das Kommando wie folgt sein:
command:///storage/downloads/beameron.sh

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Könnte Es ein Rechte-Problem sein?
Da Du im Terminal SUDO bist, sollte das Script aber auch mit diesen 
Rechten laufen und diese Rechte an die selbst aufgerufenen Scripte 
vererben - mache selber aber nicht viel mit höheren Rechten - bis auf 
'updateme', Welches mir apt-get zum Updaten aufruft (per sudo), bin ich 
immer nur User.
Wenn sudo erforderlich ist, packe Das vor den Aufruf im Script.
Beim Aufruf mit sudo-Rechten sollte keine erneute Passwortabfrage 
kommen.

Wäre mir aber 'unangenehm', wenn da irgendwo ein Script läuft, den nicht 
ich geschnitzt habe - Der darf dann auch 'sudo' spielen.

MfG

von Daniel A. (daniel-a)


Lesenswert?

Diese not found Meldung beim direkten Aufruf des scripts mit dem 
absoluten Pfad ist sehr interressant. Könnte es sein, dass sich bash 
nicht unter /bin/bash befindet? Was geben "which bash" und "realpath 
/proc/$$/exe" oder "ls -l /proc/$$/exe" oder "echo $SHELL" aus? Falls 
die ausgabe nicht /bin/bash ist, setze das ausgegebene im Script nach 
dem #! ein. In dem fall hättest du das Problem dann aber mit so ziemlich 
jedem bash script, und ein Symlink in bin könnte sich als sinvoll 
erweisen.

: Bearbeitet durch User
von JJ (Gast)


Lesenswert?

Autsch, vertan...

soweit ich es erkenne liegt das Script nicht in /storage/downloads, 
sondern in /home/kino/storage/downloads (oder ähnlich)

kannst du mal bitte die Ausgabe von
pwd
posten und das Kommando
/home/kino/storage/downloads/beameron.sh
testen?

von JJ (Gast)


Lesenswert?

Oh, sorry, doppelvertan...
Bitte ignoriert meinen letzten Port

von Jens (Gast)


Lesenswert?

Hilft das vielleicht weiter?

which bash = /usr/bin/bash
echo $SHELL= /bin/sh

von JJ (Gast)


Lesenswert?

Das hilft!

Ändere in deinem Script die erste Zeile von
#!/bin/bash
auf
#!/usr/bin/bash

Danach sollte der einfache Aufruf von
/storage/downloads/beameron.sh
funktionieren

von Jens (Gast)


Lesenswert?

leider nicht, er sagt not found

von JJ (Gast)


Lesenswert?

Hmm,

dann nochmal strukturiert:

1) Das folgende Kommando schaltet den Beamer ein, richtig?
echo -ne '\x02PON\x03' | nc 192.168.188.52 1002

2) Bitte poste die Ausgabe der folgenden Kommandos:
ls -l /storage/downloads/beameron.sh
cat /storage/downloads/beameron.sh
ls -l /usr/bin/bash

von Daniel A. (daniel-a)


Lesenswert?

Jens schrieb:
> leider nicht, er sagt not found

Hast du dabei den absoluten Pfad verwendet: 
/storage/downloads/beameron.sh oder den Relativen: ./beameron.sh ?
Falls du es mit beameron.sh statt ./beameron.sh versucht hast, das geht 
nur wenn beameron.sh in einem Verzeichnis in $PATH ist.

von Jens (Gast)


Lesenswert?

1. Das Kommando schaltet den Beamer ein:
#!/bin/bash
echo -ne '\x02PON\x03' | tee | nc 192.168.188.52 1002

2.
ls -l /storage/downloads/beameron.sh   =
-rwxr-xr-x  1 root    root   (Datum Uhrzeit) 
/storage/downloads/beameron.sh


cat /storage/downloads/beameron.sh     =
#!/usr/bin/bash
echo -ne '\x02PON\x03' | tee | nc 192.168.188.52 1002LibreELEC:~#


ls -l /usr/bin/bash     =
lrwxrwxrwx     1 root    root   (Datum Uhrzeit)   /usr/bin/bash-> 
busybox

von JJ (Gast)


Lesenswert?

Steht da wirklich
echo -ne '\x02PON\x03' | tee | nc 192.168.188.52 1002LibreELEC:~#
oder wurde eine Zeilenumbruch verschluckt?

von Jens (Gast)


Lesenswert?

steht da

von JJ (Gast)


Lesenswert?

ok, ändere die zweite Zeile bitte in

echo -ne '\x02PON\x03' | nc 192.168.188.52 1002

Die wesentliche Veränderung ist das Löschen des Anhangs.
Tee kann auch Entfernt werden, da es hier eigentlich nichts bringt.

von Daniel A. (daniel-a)


Lesenswert?

JJ schrieb:
> ok, ändere die zweite Zeile bitte in
>
> echo -ne '\x02PON\x03' | nc 192.168.188.52 1002
>
> Die wesentliche Veränderung ist das Löschen des Anhangs.

Es könnte auch sein, dass die Datei in der letzten Zeile kein newline 
hat. cat würde dann auch kein newline am ende ausgeben, und der nächste 
prompt von sh würde angehängt.

von Jens (Gast)


Lesenswert?

Geht leider weder in Cinemavision noch im Terminal.
Gebe ich /storage/downloads/beameron.sh im Terminal ein bekomme ich:
bash: /storage/downloads/beameron.sh: not found

von JJ (Gast)


Lesenswert?

Daniel A. schrieb:
> Es könnte auch sein, dass die Datei in der letzten Zeile kein newline
> hat. cat würde dann auch kein newline am ende ausgeben, und der nächste
> prompt von sh würde angehängt.

Ja stimmt, das ist auch möglich.

Mir würden ansonsten nur noch Windows Zeilenumbrüche einfallen. Aber ich 
habe keine Vorstellung wie man das über ein Forum debuggen kann.
Hast du eine Idee?

von Daniel A. (daniel-a)


Lesenswert?

JJ schrieb:
> Hast du eine Idee?

Einige:
1
hexdump -C /storage/downloads/beameron.sh
2
file /storage/downloads/beameron.sh
3
bash -c "grep \$'\\r' /storage/downloads/beameron.sh >/dev/null && echo yes || echo no"

: Bearbeitet durch User
von Jens (Gast)


Lesenswert?

Verstehe ich das richtig das das 3 mögliche Befehle sind?

von Daniel A. (daniel-a)


Lesenswert?

Ja, die Ausgabe jeder der Befehle müsste Aufschluss über die Zeilenenden 
bringen, aber ich weiss nicht ob die ersten beiden unter busybox 
verfügbar sind, und ich weiss nicht ob busyboxes bash bei der Dritten 
des $'\r' als Argument korrekt an grep übergibt, oder dort ein false 
negative möglich wäre.

von JJ (Gast)


Lesenswert?

Um defekte Zeilenenden auszuschließen können wir die Datei auch noch 
einmal neu schreiben, bzw. zur Sicherheit eine neue anlegen.

Das kannst du mit diesen Kommandos in PuTTY erreichen:
1
echo '#!/bin/bash' > /storage/downloads/beameron1.sh
2
3
echo "echo -ne '\\x02PON\\x03' | nc 192.168.188.52 1002" > /storage/downloads/beameron1.sh
4
5
chmod 755 /storage/downloads/beameron1.sh
6
7
/storage/downloads/beameron1.sh

von JJ (Gast)


Lesenswert?

Wichtige Korrektur:
In der zweiten Zeile fehlt ein >
1
echo '#!/bin/bash' > /storage/downloads/beameron1.sh
2
3
echo "echo -ne '\\x02PON\\x03' | nc 192.168.188.52 1002" >> /storage/downloads/beameron1.sh
4
5
chmod 755 /storage/downloads/beameron1.sh
6
7
/storage/downloads/beameron1.sh

Wenn es schon zu spät war, einfach die kompletten 4 Zeilen in der 
Reihenfolge nochmal ausführen.

von JJ (Gast)


Lesenswert?

Ach verdammt, noch mehr Korrekturen:
1
echo '#!/bin/sh' > /storage/downloads/beameron1.sh
2
3
echo "echo -ne '\\x02PON\\x03' | nc 192.168.188.52 1002" >> /storage/downloads/beameron1.sh
4
5
chmod 755 /storage/downloads/beameron1.sh
6
7
/storage/downloads/beameron1.sh

Diesmal gehen wir bei der Shell auf Sicher

von Daniel A. (daniel-a)


Lesenswert?

JJ schrieb:
> Diesmal gehen wir bei der Shell auf Sicher

Das echo builtin von sh untertützt keine Argumente. Also entweder doch 
bash:
1
echo '#!/usr/bin/bash' > /storage/downloads/beameron1.sh
2
printf "echo -ne '\\\x02PON\\\x03' | nc 192.168.188.52 1002\n" >> /storage/downloads/beameron1.sh
3
chmod 755 /storage/downloads/beameron1.sh

Oder so, mit sh, wenn man auf Nummer sicher gehen will:
1
echo '#!/bin/sh' > /storage/downloads/beameron1.sh
2
printf "printf '\\\002PON\\\003' | nc 192.168.188.52 1002\n" >> /storage/downloads/beameron1.sh
3
chmod 755 /storage/downloads/beameron1.sh

von Jens (Gast)


Lesenswert?

Problem gelöst. Durch ein Mitglied in einem anderen Forum.
Ihr hattet mit Zeilenumbruch recht.
Es war ein "DOS line endings created by Windows editor" Problem.
Nachdem ich: "dos2unix /storage/downloads/beameron.sh" in den Putty 
Terminal eingegeben habe, funktioniert es im Terminal 
unter:"/storage/downloads/beameron.sh" und in Cinemavision 
unter:"Command:///storage/downloads/beameron.sh.
Ohne eure Hilfe hätte das nicht funktioniert.
Vielen Dank, das ihr so viel Zeit in mein Problem investiert habt.

von JJ (Gast)


Lesenswert?

Ahh, sehr cool!
Ich hätte nicht gedacht, dass busybox dos2unix beinhaltet.

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
Noch kein Account? Hier anmelden.