javashell脚本怎么写( 三 )


这个还有一个好处是,可以读shell里面输出的结果, 方便java代码进一步操作 。也许你还会遇到这个问题,明明手工可以运行的命令,java调用的shell中某一些命令居然不能执行,报错:命令不存在!比如我在使用casperjs的时候,手工去执行shell明明是可以执行的,但是java调用的时候,发现总是出错 。
通过读取缓冲区就能发现错误日志了 。我发现即便自己把安装的casperjs的bin已经加入了path中(/etc/profile, 各种bashrc中)还不够 。
比如:exportNODE_HOME="/home/admin/node"exportCASPERJS_HOME="/home/admin/casperjs"exportPHANTOMJS_HOME="/home/admin/phantomjs"exportPATH=$PATH:$JAVA_HOME/bin:/root/bin:$NODE_HOME/bin:$CASPERJS_HOME/bin:$PHANTOMJS_HOME/bin原来是因为java在调用shell的时候,默认用的是系统的/bin/下的指令 。特别是你用root权限运行的时候 。
这时候,你要在/bin下加软链了 。针对我上面的例子,就要在/bin下加软链:ln -s /home/admin/casperjs/bin/casperjscasperjs;ln -s /home/admin/node/bin/nodenode;ln -s /home/admin/phantomjs/bin/phantomjsphantomjs;这样,问题就可以解决了 。
如果是通过java调用shell进行打包,那么要注意路径的问题了因为shell里面tar的压缩和解压可不能直接写:tar -zcf /home/admin/data/result.tar.gz /home/admin/data/result直接给你报错,因为tar的压缩源必须到路径下面, 因此可以写成tar -zcf /home/admin/data/result.tar.gz -C /home/admin/data/ result如果我的shell是在jar包中怎么办?答案是:解压出来 。再按照上面指示进行操作 。
(1)找到路径 String jarPath = findClassJarPath(ClassLoaderUtil.class); = null;try {topLevelJarFile = new JarFile(jarPath);Enumeration entries = topLevelJarFile.entries();while (entries.hasMoreElements()) {JarEntryentry = entries.nextElement();if (!entry.isDirectory()。

javashell脚本怎么写

文章插图