• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

xxd im root cronjob

Hallo Forum,

ich würde gerne den xxd Befehl im root Cronjob einsetzen.
Das System ist "Raspbian GNU/Linux 10(buster)"

Mein Script soll
Code:
#!/bin/bash
rm /home/user/hexfile.bin
xxd -r -ps /home/user/hexfile.dat /home/user/hexfile.bin
ausführen um eine String Hex Datei in eine binär Hex datei umzuwandlen. Bei der Ausführung lenke ich die stderr Ausgabe in ein .log File um.

Wenn ich dieses Script im Terminal des lokalen Users ausführe, funktioniert es. (log unauffällig)
Wenn ich dieses Script im Cronjob des lokalen Users ausführe, funktioniert es. (log unauffällig)
Wenn ich dieses Script im Cronjob von Root ausführe, steht im Log:
Code:
...
Usage:
	xxd [options] [infile [outfile]]
...
Da der Scriptparser mir die Syntax-Hilfe ausgibt, gehe ich davon aus der Parser die Syntax nicht interpretieren konnte. Er sagt mir nur leider nicht genau warum. Ich vermute, dass es an einer der Environment Variablen liegt. Aber die Standardtipps zu diesem Problem wie:
Code:
. /home/user/.profile
oder
Code:
BASH_ENV=/home/user/.profile
oder
Code:
sudo -H -u user bash -c 'command'
haben die aktiven Environment Variablen bisher kein Stück verändert. Ich habe
Code:
env > /home/user/cronEnv
eingebaut um das zu monitoren.

Gibt es einen Tipp um das Problem gezielter anzugehen als diese generellen Tipps die leider doch nicht so generell sind?
 

marce

Guru
... und Du bist sicher, daß
Code:
/home/user/hexfile.dat
existiert?
(kannst Du ja im Script vorher abprüfen und ggf. auch mal rausloggen lassen)
 
OP
S

SuperPCFan

Newbie
Ich habe
Code:
if [ ! -f /home/user/hexfile.dat ]; then
echo "scheisse!"
fi
in das Script eingebaut.

Im Log erfolgt keine Ausgabe des Echo. Ich würde also sagen, dass die Datei /home/user/hexfile.dat da ist.
 

marce

Guru
... und Du bist Dir sicher, daß Du 100% das gleiche Script ausführst?

Weil die Doku (zumindest die Online, die ich gerade gelesen habe) der Meinung ist, daß Du entweder
Code:
--ps
verwenden sollst oder, wenn Du wirklich
Code:
-ps
, also
Code:
-p -s
meinst, dem -s noch einen passenden Parameter mitgeben solltest...
 
OP
S

SuperPCFan

Newbie
Ich habe zu diesem Punkt nur lauter widersprüchliche Doku gesehen.
In macher Doku steht, dass man unbedingt -ps (ohne Parameter und mit nur einem "-") benutzen soll.
In wieder anderer Doku steht, das man -p benutzen soll.
In wieder anderer Doku steht, dass nur eine einzige Option erlaubt ist. (was ja auch blödsinn ist, wenn man xxd so benötigt wie ich)

Kann sein, das ich manche Kompination noch nicht probiert habe.
Aber es ist auf jeden Fall das gleiche Script, dass lokal funktioniert(die .bin Datei wird korrekt erstellt) und unter Root nicht.

Aufgefallen ist mir noch, dass das Systax-Highlighting xxd nicht erkennt. Der Befehl scheint "weniger-standard" zu sein als z.B. "rm".

Ich kann ja nochmal ein paar -, --, p, s, ps Kombinationen durchprobieren. :???:
 
OP
S

SuperPCFan

Newbie
Ich möchte irgendwen erwürgen....wenn ich nur wüsste wen.... :zensur: :D

Das Problem ist das "-". Irgendwie ist in dem Script nicht das für Linux üblich kurze "-" enthalten gewesen.
Sondern das in Windows übliche längere "-".

Offenstichtlich ist das nicht nur ein (unscheinbarer) Unterschied in der Anzeige, sondern auch in dem zugrundeliegenden Keycode:
https://www.punctuationmatters.com/the-difference-between-a-dash-and-a-minus-sign/

Die Optionen mit dem längeren "-" haben den Parser verwirrt....
Danke für die Mühe.
 

marce

Guru
Vermutlich ein Phänomen / Kombination von Copy-Paste aus einer Website und inzwischen meist funktionierender UTF-8-Unterstützung aller beteiligten Komponenten :)

-> Ich mach bei sowas immer den Umweg über einen unverfänglichen Editor, der einem sowas auf Wunsch direkt anzeigt...
 
Oben