yuncaiguanghui 2011-08-22 21:43
浏览 155
已采纳

Runtime调用shell文件执行外部命令,传10个位置参数进去,在执行shell时,判断出参数总数不是10,执行退出,求解答

cm=/usr/local/bea/watool/tact/share/rootdir/system/expendableparts/uploadComm.sh
/usr/local/bea/watool/tact/share/rootdir/system/expendableparts/91010_888888_20110822134252_mytest.csv
watool
tactclient
tact
/usr/local/bea/watool/tact/share/rootdir/system/expendableparts /usr/local/bea/watool/tact/share/rootdir/system/expendableparts/log
91010_888888_20110822134252
91010_888888_20110822134252_expendpartsload.log
91010_888888_20110822134252_expendpartsload_bad.log
888888
这是shell文件以及它的十个位置参数
Runtime r = Runtime.getRuntime();
Process p = r.exec(cm);
p.waitFor();
return p.exitValue();
下面一段是shell文件里面的语句,
if [ $# -ne 10 ]
then
exit 1;
fi
执行结果是1,我传进去10个参数,怎么他还执行成功,求解答。

  • 写回答

2条回答 默认 最新

  • myali88 2011-08-22 23:14
    关注

    [quote]且unix机器上没有.profile文件,这有没有影响 [/quote]
    没有的话,前面可以加一个判断再执行。

    这个问题你要分两步调,第一步,确保你的shell脚步本事是正确的,你也没告诉我到底单独执行脚步是否正常;第二步,再考虑是否java程序调用shell出错。

    [quote]它执行到不等于10时就退出了,后面的代码比较多且调用了oracle的sqlplus与sqlldr等数据库操作[/quote]
    这个是指直接执行shell吗?如果是这样,那你的shell本事就不符合你的预期。这样的话,你需要确定前面哪里有错?这个比较难调了,你要仔细看看。比如:
    LANG=zh.GBK 这个写法也不太合适,一般都是:LANG=zh_CN.GBK
    ORA_NLG33=$ORACLE_HOME/ocommon/nls/admin/data ,这里的ORACLE_HOME前面是否定义了
    . /usr/local/bea/.profile 这里增加判断,
    if [ -x /usr/local/bea/.profile]; then

    . /usr/local/bea/.profile
    fi

    类似这样的都有可能导致执行出错,你可以在你认为可能出错的地方用“echo”来打印,可以采用二分法,快速定位错误位子。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看