我正试图用javac
编译一个shell脚本,它不断向我返回以下错误:
$ bash run_RGE.sh
javac: invalid flag: Element.java
Usage: javac <options> <source files>
use -help for a list of possible options
javac: invalid flag: RGE.java
Usage: javac <options> <source files>
use -help for a list of possible options
javac: invalid flag: -Xms1024m
Usage: javac <options> <source files>
use -help for a list of possible options
sleep: missing operand
Try "sleep --help" for more information.
我的shell脚本如下:
#!/bin/bash
# -*- coding: utf-8 -*-
export LIB=C:/home/b04280/Transfert/Libs/
CLASSPATH=$(echo "$LIB"/*.jar | tr ' ' ':')
export ficIn=C:/home/b04280/Transfert/rgeII.xlsx/
export repIn=C:/home/b04280/Transfert/rgeII/
export repOut=C:/home/b04280/Transfert/rgeIIcible/
javac -cp $CLASSPATH Element.java
javac -cp $CLASSPATH RGE.java
javac -Xms1024m -Xmx1024m -cp $CLASSPATH RGE $ficIn $repIn $repOut > docx.txt
sleep
我想知道这个错误是从哪里来的,我看了这里关于同一主题的其他问题,但他们的解决方案似乎不适合我的特定情况。
请帮忙吗?提前谢谢。
PS。我也有睡眠错误(我从批处理中"翻译"了这个脚本--gt;shell,"睡眠"是我找到的"暂停"的替代品(
我认为这应该更接近您的需求:
#!/bin/bash
# -*- coding: utf-8 -*-
lib=/home/b04280/Transfert/Libs
classpath=$(echo "$lib"/*.jar | tr ' ' ':')
fic_in=/home/b04280/Transfert/rgeII.xlsx/
rep_in=/home/b04280/Transfert/rgeII/
rep_out=/home/b04280/Transfert/rgeIIcible/
javac -cp "$classpath" Element.java
javac -cp "$classpath" RGE.java
java -Xms1024m -Xmx1024m -cp "$classpath" RGE "$fic_in" "$rep_in" "$rep_out" > docx.txt
特别是:
- unix路径
- 引用变量,以避免在其值包含空格时将其解析为多个参数
- 在最后一个命令RGE是一个类名而不是一个文件路径,您可以指定内存设置,加上该命令会产生有用的输出;在我看来,它应该执行代码(
java
(,而不是编译它(javac
( - 我不确定是否有必要,但从
$LIB
的值中删除尾部斜杠可以避免在$CLASSPATH
中出现双斜杠,这可能会混淆java[c]
- 删除了无用的
export
s(如果您调用了其他依赖于这些变量设置的bash脚本或二进制文件,那么它们会很有用,但您只是将它们作为参数传递( - 应用了命名约定(避免使用大写的变量,因为它们可能与环境变量冲突,使用
snake_case
而不是camelCase
(
在您的上下文中,我不确定您是在执行java[c]
二进制文件的linux版本还是windows版本。如果是windows,则需要用tr ' ' ';'
替换tr ' ' ':'
部分,因为windows上的类路径是分号分隔的,而不是冒号分隔的。