Hallo, On 1/9/2006 12:09 AM, Joachim Tüns wrote:
Hi,
ich habe ein Verständnisproblem:
Ich habe die folgenden Zeilen in einem Script: #!/bin/sh echo Text | grep -e .*[^[:digit:]].* - echo $? echo 15 | grep -e .*[^[:digit:]].* - echo $?
Wenn ich dieses Script in dem Verzeichnis starte, in dem das Script gespeichert ist, erhalte ich die korrekte Ausgabe: Text 0 1
Nun starte ich das Script mit /home/benutzer/scripte/script aus einem anderem Verzeichnis. Dann muss ich zweimal Strg+C drücken und erhalte als Ausgabe: 130 130
Ich stelle nun folgende Zeilen an den Anfang des Scripts, dann bekomme ich das richtige Ergebnis beim Start des Scripts aus jedem Verzeichnis. Diesen Zeilen wechseln in den Scriptpfad: script_pfad="$BASH_SOURCE" script_pfad=${script_pfad%\/*} script_pfad="$script_pfad""/" cd $script_pfad
Was bedeutet das?
Du solltest die RE quoten, d.h. dafür sorgen dass die Shell nicht die ihr bekannten Metazeichen interpretiert. Vermutlich werden in dem script-Verzeichnis keine Dateien gefunden die Dein Ergebnis vermurksen, in dem anderen dagegen schon. Ausserndem ist m.W. das - hinter grep unnötig, denn grep liest standardmässig standardinput :-) Also z.B.
arno@elf:~> echo 15 | grep -e '.*[^[:digit:]].*'; echo $? 1 arno@elf:~> echo Text | grep -e '.*[^[:digit:]].*'; echo $? Text 0 arno@elf:~>
aber z.B. (OHNE '-Zeichen!)
arno@elf:~> echo 15 | grep -e .*[^[:digit:]].* ; echo $? grep: .#liste.html: Datei oder Verzeichnis nicht gefunden 2 arno@elf:~>
was von der shell bei mir zu
arno@elf:~> set -x arno@elf:~> echo 15 | grep -e .*[^[:digit:]].* ; echo $? + echo 15 + grep -e .addressbook.lu .dayplan.priv .emacs.d .fonts.cache-1 ... habe den Rest der ca. 30 Zeilen mal gelöscht grep: .#liste.html: Datei oder Verzeichnis nicht gefunden + echo 2 2 arno@elf:~>
expandiert wird. In anderen Worten: Beim shell-Programmieren lieber 10mal zu viel als einmal zu wenig quouten... Arno
Gued gohn Achim
-- IT-Service Lehmann al@its-lehmann.de Arno Lehmann http://www.its-lehmann.de