Syntaxfehler in der Nähe unerwartetes token `do'
Ich versuche zu konvertieren .bat-Datei in .sh-Datei hier ist mein code-Zeilen
#!/bin/sh
./setenv.sh
export _LIBJARS=for i in [$XYZ_HOME$/lib/*.jar];do source $XYZ_HOME$/bin/append.bat i
export CLASSPATH=$ANT_HOME$/lib/ant.jar;$_LIBJARS$$ANT_HOME$/bin/ant -buildfile $XYZ_HOME$/build.xml $1 $2 $3 $4
Nach dem schreiben dieser Zeile, die ich schrieb chmod 755 ./build.sh
dann schrieb ich ./build.sh test-deploy
Ich erhalte die folgende Fehlermeldung:
./build.sh: line 3: syntax error near unexpected token `do'
./build.sh: line 3: `export _LIBJARS=for i in [$XYZ_HOME$/lib/*.jar];do source $XYZ_HOME$/bin/append.bat i'
Meine .Bat-Datei ist wie
call setenv.bat
set _LIBJARS=
for %%i in (%XYZ_HOME%\lib\*.jar) do call %XYZ_HOME%\bin\append.bat %%i
set CLASSPATH=%ANT_HOME%\lib\ant.jar;%_LIBJARS%
%ANT_HOME%\bin\ant -buildfile %XYZ_HOME%\build.xml %1 %2 %3 %4
Oder jede tutorial zu verstehen, die Zeilen von code oder im Zusammenhang mit shell-und bash-Datei bitte schlagen Sie mich.
- vielleicht
export _LIBJARS=$(for ....)
. Ich kann nicht verstehen, was möchten Sie tun in der 3. Zeile... Es scheint, Sie wollen in _LIBJARS die Ausgabe der bat-Dateien. - Sir, wenn ich das weglasse wird das Semikolon bekomme ich die Fehlermeldung wie folgt ./build.sh: Zeile 3: export:
[$/lib/*.jar]do': not a valid identifier ./build.sh: line 3: export:
$/bin/Anhängen.bat': not a valid identifier - 1 Shell-Variablen nicht geschrieben werden, mit einem
$
am Ende. 2source [...].bat
sieht aus wie ärger, 3 @Hastur ist wohl richtig, und auch einendone
. 4, Die for-Schleife ist falsch in so vieler Hinsicht, vielleicht sollten Sie beginnen, mit einem shell - /Bash-tutorial. - Warum müssen Sie
source
Ihre bat-Datei? Es ist nicht genug, um es auszuführen? Wenn Siesource
eines Skripts ist irgendwie, als ob Sie schreiben den code der Punkt des Skripts, wo Sie die Quelle. @Biffen stellen als Schwierigkeiten in diesem Punkt. Wir wissen nicht, wie Sie Anhängen.Fledermaus verhält, und wenn es braucht, um starten Sie in eine neue shell.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bash-Shell und Batch sind zwei völlig verschiedene Programmiersprachen, die mit Ihrer eigenen syntax und die Art, wie Sie arbeiten.
Beispiel:
Laufen
setenv.bat
im Skript und die Steuerung wieder an Ihre aktuelle Skript. Allerdings:Wird laichen eine neue shell, legen Sie die Umwelt in die Schale, und dann zurück zu den Eltern-shell, wo diese Umgebungsvariablen nicht festgelegt werden. Zu tun, das äquivalent in der Schale, müssen Sie Quelle in
setenv.sh
:ODER
Die erste ist kompatibel zu allen Bourne-Stil Muscheln. Die Letzte ist mehr lesbar, aber möglicherweise nicht kompatibel mit verschiedenen Muscheln.
In der Schale, können Sie dies tun:
Denken Sie daran, dies ist nur stattfindet, in diesem shell-Skript. Im Gegensatz zu Batch, es ist nicht auf die Eltern-shell, und so
$CLASSPATH
ist in Ordnung.Schließlich:
Den
$*
funktionieren wird, egal wie viele Gegner übergeben werden.CLASSPATH="$CLASSPATH:$jar"
$CLASSPATH
ist, verwenden Sie es in dem Befehl, der folgt. Ich sehe jetzt, dass du nicht bist.Könnte dies sein, wie Sie wollen, es zu tun:
*.jar
müssen platziert werden, bevor die Schließung"
oder funktioniert es so oder so?*
behandelt wird, wörtlich, nicht als glob.