Script in unterschiedlichen Verzeichnissen starten
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? Gued gohn Achim
Hallo Joachim, 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?
Gued gohn Achim
veruchs's doch mal damit: echo Text | grep -e '.*[^[:digit:]].*' - echo $? echo 15 | grep -e '.*[^[:digit:]].*' - echo $? die Apostroph um Deinen regulären Ausdruck verhinder, daß die shell bereits etwas ersetzt. In dem Verzeichnis, in dem Du das richtige Ergebnis erhälst, befindet sich offenbar keine Datei, die diesem regulären Ausdruck entspricht, während es in dem anderen Verzeichnis offenbar so ist. Gruß Martin
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
Hallo Arno, hallo Martin Am Montag, 9. Januar 2006 00:29 schrieb Arno Lehmann:
On 1/9/2006 12:09 AM, Joachim Tüns wrote:
#!/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, [...]
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
Du solltest die RE quoten, d.h. dafür sorgen dass die Shell nicht die ihr bekannten Metazeichen interpretiert. danke, das Quoten war es. Hätte ich auch selbst drauf kommen können.
Ausserndem ist m.W. das - hinter grep unnötig, denn grep liest standardmässig standardinput :-)
Schon klar, war ein Versuch von mir und es steht in der manpage "... or the file name - is given)" .
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:~> [...] Auch das ist nachvollziehbar für mich. Danke! Werde nun noch mehr aufs Quoten achten.
Gued gohn Achim
participants (3)
-
Arno Lehmann
-
Joachim Tüns
-
Martin Deppe