Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
bash - command line parameter whitespace strip - wie?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
someone
Gast





BeitragVerfasst am: 28. Jan 2008 16:59   Titel: bash - command line parameter whitespace strip - wie?

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
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 28. Jan 2008 22:41   Titel: Re: bash - command line parameter whitespace strip - wie?

someone hat folgendes geschrieben::

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

someone
Gast





BeitragVerfasst am: 28. Jan 2008 22:54   Titel: bash - command line parameter whitespace strip - wie?

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!
 

someone
Gast





BeitragVerfasst am: 28. Jan 2008 23:41   Titel: bash - command line parameter whitespace strip - wie?

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
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 29. Jan 2008 9:52   Titel:

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..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 29. Jan 2008 12:13   Titel: Re: bash - command line parameter whitespace strip - wie?

someone hat folgendes geschrieben::

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

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

someone
Gast





BeitragVerfasst am: 30. Jan 2008 0:12   Titel: bash - command line parameter whitespace strip - wie?

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.
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy