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

Problem mit Zeichenkodierung

Hallo,

ich habe ein Problem mit meinem Shellskript.
Das Skript soll per netcat Daten empfangen und in eine Logdatei schreiben.
Funktioniert soweit auch super ;)

Nur habe ich jetzt ein Problem.
Wenn ich das Skript als normaler Nutzer oder root von der Konsole aus im normalen Betrieb starte schreibt es die Zeichen richtig jeweils in eine neue Zeile.
Code:
"#CSV","24.8 °C","42.5 %RH","03.06.09","14:36:17","CSV#"
"#CSV","24.8 °C","42.6 %RH","03.06.09","14:36:22","CSV#"

Dass Problem ist nun folgendes.
Ich muss das Skript später automatisiert mit dem System starten.
Dies wollte ich durch Eintragung in die /ect/init.d/boot.local lösen.
(sh /....../skript.sh > /dev/null &)

Leider klappt dies jedoch nicht, da anstatt des ° - Zeichen ein � - Zeichen in das Logfile geschrieben wird.

Wie bekomme ich es hin dass nun von Anfang an die Codierung "de_DE.UTF-8" verwendet wird?
Ich habe schon erfolglos mit export LANG=de_DE.UTF-8 rumgespielt, jedoch ohne erfolg.

Hat jemand eine Idee?
Wenn ich angemeldet bin und es per Hand aus der Konsole starte funktioniert es ja perfekt, dass muss doch auch automatisiert klappen ;(


Gruss und noch einen entspannten Mittwoch
 
avravr schrieb:
Ich muss das Skript später automatisiert mit dem System starten.
Dies wollte ich durch Eintragung in die /ect/init.d/boot.local lösen.
Ich denke das ist eine schlechte Idee, da ist das Netzwerk noch nicht gestartet, daher bezweifele ich das netcat funktioniert. Außerdem kommt bei mir später eine Meldung "Starting Unicode mode", sollte eigentlich nur für die Tastatur konfigurieren, aber wer weiss was da noch alles nebenbei erledigt wird.

An deiner Stelle würde ich ein Runlevel-Script schreiben (ist einfacher als man denkt) das so spät wie möglich gestartet wird, um sicher zu sein das auch alle Netzwerkdienste laufen (DNS, ...).
 
So, das ganze mal per Runlevel getestet.
Immer noch das selbe Problem mit dem Sonderzeichen ;(
 
Bei mir klappt es per Runlevel-Script.

/etc/init.d/test_unicode
Code:
#! /bin/bash
#
# /etc/init.d/test_unicode
#
### BEGIN INIT INFO
# Provides:          test_unicode
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start: ypbind $syslog gpm firstboot kbd resmgr earlyxdm winbind acpid
# Should-Stop:  ypbind $syslog gpm firstboot kbd resmgr earlyxdm winbind acpid
# Default-Start:     3 5
# Default-Stop:	     0 1 2 6
# Description:       Testen der UTF8 Zeichencodierung
### END INIT INFO

. /etc/rc.status
OUTPUTFILE="/tmp/test_unicode.txt"

rc_reset

case "$1" in
    start)
	echo -n "Testen einiger Sonderzeichen"
	echo "Testen einiger Sonderzeichen" > $OUTPUTFILE
	echo " ae  ä" >> $OUTPUTFILE
	echo " oe  ö" >> $OUTPUTFILE
	echo " ue  ü" >> $OUTPUTFILE
	echo " sz  ß" >> $OUTPUTFILE

	rc_status -v
	# exit 0
	;;
    stop)
	;;
    restart)
	;;
    reload|force-reload)
	;;
    status|check)
	;;
    probe)
	;;
    try-restart|condrestart)
	;;
    *)
	echo "Usage: $0 {start|stop|status|restart|reload|force-reload|probe|try-restart}"
	exit 1
esac
rc_exit
Das Ergebnis:
Code:
Testen einiger Sonderzeichen
 ae  ä
 oe  ö
 üe  ü
 sz  ß
Habe im Editor die Kodierung kontrolliert.

Probiere mal das Script bei dir aus, dann sehen wir ob die Einstellungen korrekt sind. Wenn nicht, was für ein Linux benutzt du denn. Ohne detaillierte Angaben kann man das Problem nicht weiter analysieren buw einkreisen.
 
Wenn das Script per cron, [Edit]kann man auch per init machen, dann aber eher die 2. Methode,[/Edit] aber da würde ich die Parametergestartet wird und es in der Umgebung des Benutzers klappt, dann sollte man das Script in cron auch mit der Umgebung des Nutzers auführen mit su - oder sudo, denn cron alleine bietet eine Minimalumgebung. Oder die Umgebungsparameter wie gewünscht in das Script zu forderst mit eintragen.

Viele Grüße, Prinzunix.
 
Oben