Batch-Programmierung die 2.
-
Hi Leute,
ich bin totaler Anfänger, was Batch-Programmierung betrifft... Ich versuche gerade folgendes Problem zu lösen:
Ich rufe ein Programm mit Parametern auf, das daraufhin eine Ausgabe auf den stdout macht.
Ich will jetzt überprüfen, ob in der Ausgabe auch was drin stand oder ob sie leer war.
Im Grunde versuche ich folgendes bash-script auf windows-batch zu konvertieren:REPOS="$1" TXN="$2" # Make sure that the log message contains some text. SVNLOOK=/usr/local/bin/svnlook $SVNLOOK log -t "$TXN" "$REPOS" | \ grep "[a-zA-Z0-9]" > /dev/null || exit 1
So "weit" bin ich schon (
):
set REPOS=%1 set TXN=%2 svnlook log -t %TXN% %REPOS% exit 1
Weiter komm ich nicht...
Alle Versuche die Rückgabe abzufragen sind fehlgeschlagen. Habe es beispielsweise so versucht:if svnlook log -t %TXN% %REPOS% == "" exit 1
oder so:
set MESSAGE="" svnlook log -t %TXN% %REPOS% 1>MESSAGE if %MESSAGE% == "" exit 1
Klappt aber beides nicht...
-
wo genau ist das problem?
-
volkard schrieb:
wo genau ist das problem?
Aus verschiedenen Gründen keine Alternative.
Einer ist z.B. dass ich mich zu wenig damit auskenne um zu wissen, was ich davon brauch und was nciht. Sollte eben nur das installiert werden, was auch benötigt wird und nicht Unmengen mehr...volkard schrieb:
Temporäre Dateien... Will ich eigentlich vermeiden. Vorallem, weil ich keine Möglichkeit kenne, temporäre Dateinamen zu erzeugen (was allerdings nichts zu bedeuten hat...)
-
svnlook log -t %TXN% %REPOS% 1>MESSAGE
erzeugt ne datei namens MESSAGE.echo. > LEER
erzeugt ne leere datei.die müßtet du dann per fc erglichen können.
-
dEUs schrieb:
Einer ist z.B. dass ich mich zu wenig damit auskenne um zu wissen, was ich davon brauch und was nciht. Sollte eben nur das installiert werden, was auch benötigt wird und nicht Unmengen mehr...
deswegen lagern die unmengen bei mit in d:\lager\vielleicht\brauch\ichs\mal\unxutils
und wenn ich mal was brauche. kopiere ich ne datei nach c:\bin
und das sieht erst so aus:14.04.2003 00:00 77.312 bzip2.exe 11.11.1999 00:00 49.152 gzip.exe 02.04.2005 12:03 249.856 plink.exe 28.03.2005 23:12 262.144 pscp.exe 13.08.2005 12:47 421.888 putty.exe 15.05.2003 14:42 288.256 Rar.exe 10.10.2000 00:00 65.536 rm.exe 11.11.2001 00:00 114.688 tar.exe 14.04.2003 00:00 102.400 unzip.exe 14.04.2003 00:00 252.416 wget.exe
und noch die awk.exe dazumachen, wäre keine blamage. oder do kopierst die awk.exe einfach in das verzeichnis, wo dein script liegt.
temporäre dateien sind schlimmer.
-
Ok, dann mach ich das halt so. Wo bekomm ich die am Besten her? Habe mir gerade Cygwin installiert, aber das braucht nen Haufen mehr als bei dir im Verzeichnis ist...
-
dEUs schrieb:
Ok, dann mach ich das halt so. Wo bekomm ich die am Besten her? Habe mir gerade Cygwin installiert, aber das braucht nen Haufen mehr als bei dir im Verzeichnis ist...
cygwin kannste gleich wieder löschen.
http://www.google.de/search?hl=de&q=unix+utils&meta=
-
Schön dass du mir das sagst. Den Eindruck hatte ich nämlich auch.
Danke für den Link.
-
Grmml. Ich bin offensichtlich zu doof dafür.
Deswegen versuche ich jetzt etwas weitergefasst zu erklären, was ich eigentlich versuche:
In Subversion (Source-Code-Verwaltung) gibt es sogenannte Hook-Scripts, die an bestimmten Stellen aufgerufen werden, z.B. bevor ein Commit zugelassen wird.
Unter Windows wird dann in einem bestimmten Verzeichnis geschaut, ob dort eine pre-commit.bat oder pre-commit.exe liegt. Falls ja, wird diese ausgeführt. OK, d.h. ja schonmal, dass ich auf jedenfall teilweise mit windows-batch arbeiten muss, weil bat-Dateien nunmal mit der cmd.exe gestartet werden.(BTW: Habe mir die UnxUtils heruntergeladen, hoffe, die sind ok)
Also habe ich mein bash-script in pre-commit.sh umbenannt und sh-Dateien mit der sh.exe aus den UnxUtils verknüpft.
Diese Hook-Scripts können bestimmen, ob die Aktion fehlschlägt oder nicht (exit 0 oder 1). Und genau das ist jetzt wieder mein Problem. Ich ruf in meiner bat-Datei die sh-Datei auf, habe aber keine Möglichkeit an deren return-code zu kommen...exit pre-commit.sh
Das hat's leider nicht gebracht.
Hilf mir bitte mal ein wenig auf die Sprünge...
-
hoi dEUs
gibt das sh-script keinen ERRORLEVEL zurueck ?
Meep Meep
-
dEUs schrieb:
Ich ruf in meiner bat-Datei die sh-Datei auf, habe aber keine Möglichkeit an deren return-code zu kommen...
exit pre-commit.sh
Das hat's leider nicht gebracht.
Hilf mir bitte mal ein wenig auf die Sprünge...meinste in der batch
if ERRORLEVEL ...
?
-
Ja, das tut! Danke
Allerdings eine Frage: Funktioniert das auch korrekt auf Multithreaded Systemen?
Laut http://gearbox.maem.umr.edu/batch/variable.htm ist das nämlich der Exit-Code des zuletzt beendeten Skripts/Programms, muss also nciht zwingend dasjenige sein, das ich aufgerufen habe...
-
dEUs schrieb:
Ja, das tut! Danke
Allerdings eine Frage: Funktioniert das auch korrekt auf Multithreaded Systemen?
Laut http://gearbox.maem.umr.edu/batch/variable.htm ist das nämlich der Exit-Code des zuletzt beendeten Skripts/Programms, muss also nciht zwingend dasjenige sein, das ich aufgerufen habe...du hast doch ne cmd.exe um dich, die ERRORLEVEL sollte lokal zu dieser cmd-shell sein.
-
dEUs schrieb:
if %MESSAGE% == ""
Ich glaube Null-Vergleiche sind nicht erlaubt, und Du musstest Dir immer sowas basteln:
IF %MESSAGE%KACKESEL == "KACKESEL" ... REM ggf. ohne "
Wenn IF zuschlägt ist %MESSAGE% leer.
-
Sgt. Nukem schrieb:
dEUs schrieb:
if %MESSAGE% == ""
Ich glaube Null-Vergleiche sind nicht erlaubt, und Du musstest Dir immer sowas basteln:
IF %MESSAGE%KACKESEL == "KACKESEL" ... REM ggf. ohne "
Wenn IF zuschlägt ist %MESSAGE% leer.
ohne "
der übliche weg ist aber mit " und die " ersetzen einfach KACKESEL
if "%MESSAGE%" == ""
-
Wie auch immer...
Was ich nur sagen wollte ist, daß cmd.exe bzw. command.exe jede sh/bash/tcsh/zsh/csh/... um Längen wegrul0rt!!