Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 15. Nov 2018 3:50

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 28. Jan 2008 16:59 
Hallo,

ich habe folgendes Problem:

Ein Daemon ruft bei bestimmten Ereignissen ein Bashscript auf und übergibt dabei
folgende Parameter

OBJ pathname filename eventumber eventtext

z.B. :
FILE /tmp/eventtest x.tmp 1234 deleted

Wenn ich mit folgendem Script die übergeben Parameter einlese und ausgebe funktioniert alles,
solange ich das von der command line probiere.
Sobald die Parameter jedoch vom Daemon kommen habe ich plötzlich einen Übergabeparameter mehr


Anscheinend übergibt der Daemon jedoch noch irgendwelche unsichtbaren Zeichen.


Anbei ein Beispiel für mein Problem:

meintest.sh:
***
#!/bin/bash
echo 1:$1 2:$2 3:$3 4:$4 5:$5 6:$6 >> meintest.log
***

Rufe ich nun folgendes auf bekomme ich:
$./meintest.sh FILE /tmp/eventtest x.tmp 1234 deleted
$tail -n 1 meintest.log
$1:FILE 2:/tmp/eventtest 3:x.tmp 4:1234 5:deleted

Wenn aber der Daemon das script aufruft erhalte ich:
$tail -n 1 meintest.log
$1:FILE 2: 3:/tmp/eventtest 4:x.tmp 5:1234 6:deleted

Wie kann ich alle leading und trailing whitespaces (ich tippe auf ein tab) mit bash Hausmitteln entfernen?

PS: wenn ich dem script noch ein ls $2/$3 >> meintest.log bzw. ein ls $3/$4 >> meintest.log hinzufüge,
erhalte ich bei Aufruf von der command line ein korektes Ergebnis.
Bei Aufruf durch den Daemon erhalte ich jedoch ein File not found

Ich danke im Voraus für eure Hilfe


Nach oben
   
BeitragVerfasst: 28. Jan 2008 22:41 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
Wie kann ich alle leading und trailing whitespaces (ich tippe auf ein tab) mit bash Hausmitteln entfernen?
Gar nicht.

Die Aufrufparameter werden einem Programm nicht als ein einziger String übergeben, sondern als ein Array von Strings, jeder String ein Parameter. Deshalb ist ein Parameter mit dem Wert NULL auch nicht von innerhalb deines Skripts irgendwie entfernbar, außer, den ersten Parameter grundsätzlich zu ignorieren oder halt den Daemon zu korrigieren.

$ man execve

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
BeitragVerfasst: 28. Jan 2008 22:54 
Naja, das klingt ja nicht gut!

Bei dem Daemon handelt es sich um incrond, welcher Veränderungen am
Filesystem meldet.
Diesen kann und will ich jedoch nicht fixen, da ich kein Programmierer bin

Meine Idee war jedoch sowas wie ein strip oder irgend eine Möglichkeit die Variablen
mittels z.B. awk etc. zu bereinigen und an eine neue Variable zu übergeben.

z.B. pathname=awk ???????? $n ???????

und erst dann im weitern Script zu verwenden.

Das ist insbesonders interresant, da ich siehe PS. z.B. den übergebenen
Filenamen ja auch nicht verwenden kann.

Danke jedoch für Deine Antwort.
Ich werde mich mit shell scripting wohl etwas intensiever beschäftigen müssen.

Sollte sonst noch jemand einen Ansatz haben Bitte ich um Antwort!


Nach oben
   
BeitragVerfasst: 28. Jan 2008 23:41 
Sorry, ich bins nochmal

Ich habe zu dem Problem folgenden Mailinglist Eintrag gefunden:

http://inotify.aiken.cz/hypermail/incron/0009.html

Vielleicht kann damit jemand was anfagen?

Danke


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 29. Jan 2008 9:52 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 14. Jan 2000 15:37
Beiträge: 699
Wohnort: Jülich
Als Quick'n'Dirty Workaround kannst Du "set $*" verwenden. Als Beispiel siehe folgendes Skript:
Code:
#!/bin/bash

echo Vorher:
echo Anzahl Argumente: $#
for ARG ; do
    echo $ARG
done

set $*

echo Nachher:
echo Anzahl Argumente: $#
for ARG ; do
    echo $ARG
done
Das sieht zur Laufzeit so aus:
Code:
$ ./notab.sh hallo "      " haha
Vorher:
Anzahl Argumente: 3
hallo

haha
Nachher:
Anzahl Argumente: 2
hallo
haha
$
Zwischen den Anführungszeichen habe ich in der Bash Ctrl-V Ctrl-I getippt, um ein literales Tabzeichen einzufügen (die bash will ja ansonsten immer eine Tab-Completion ausführen).

Nebenwirkung dieser Lösung: Sollte in irgendeinem anderen Argument Whitespace auftauchen, wird dieses Argument an dieser Stelle in 2 Argumente zerissen!


Daher wär's besser, incrond zu fixen bzw. die Konfigdatei: Steht da vielleicht zu Formatierungszwecken irgendwo ein Tab zuviel drin?

Jochen

_________________
Die grösste Lüge der EDV? "Mal eben..."


Nach oben
   
BeitragVerfasst: 29. Jan 2008 12:13 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
Da steht, du sollst in der Konfigurationsdatei von incrond einfach die einzelnen Parameter durch Leerzeichen abtrennen und nicht durch Tabs. Mach das doch einfach.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
BeitragVerfasst: 30. Jan 2008 0:12 
erstmal Danke, Danke, Danke an Janka und Jochen

ich habe meine incrontab mit einem Hex Editor überprüft und dabei festgestellt, das keine Tabs drinnen sind.

Ich werde am kommenden Wochenende (oder wenn es die Arbeit zulässt früher)
den anderen Lösungsansatz von Jochen ausprobieren und euch danach Bescheid geben.

Weiters bin ich natürlich an jedem anderen input interresiert.

Ich versuche mit dem incrond ein nahezu echtzeit Backup einiger, weniger, sehr wichtigen Dateien über rsync auf einen Server zu erreichen.
Ich benötige also keine komplette Spiegelung eines Filesystem.
Anscheinend ist incrond das Mittel der Wahl, nur leider bekomme ich das ganze
nicht so hin wie ich will.

someone

PS: Demnächst werde ich mich wohl in diesem Forum registrieren.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de