0 0

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

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个参数,怎么他还执行成功,求解答。

问题补充:
myali88 写道
你直接执行shell是否返回 预期结果呢?

你把sh里面不等于10改小来测试一下,看看是否是参数传的问题。我直接使用-ne 1来测试是正常返回。

把你执行shell的完整代码贴上了。

代码太长,我把最前面的展示出来,看一下是前面设置错误吗,
LANG=zh.GBK
NLS_LANG="Simplified Chinese"
ORA_NLG33=$ORACLE_HOME/ocommon/nls/admin/data

export LANG NLS_LANG ORA_NLS33

. /usr/local/bea/.profile
if [ $# -ne 10 ]
then
exit 1;
fi
它执行到不等于10时就退出了,后面的代码比较多且调用了oracle的sqlplus与sqlldr等数据库操作

问题补充:
myali88 写道
你直接执行shell是否返回 预期结果呢?

你把sh里面不等于10改小来测试一下,看看是否是参数传的问题。我直接使用-ne 1来测试是正常返回。

把你执行shell的完整代码贴上了。

且unix机器上没有.profile文件,这有没有影响
2011年8月22日 21:43

2个答案 按时间排序 按投票排序

0 0

采纳的答案

引用
且unix机器上没有.profile文件,这有没有影响

没有的话,前面可以加一个判断再执行。

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

引用
它执行到不等于10时就退出了,后面的代码比较多且调用了oracle的sqlplus与sqlldr等数据库操作

这个是指直接执行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”来打印,可以采用二分法,快速定位错误位子。

2011年8月22日 23:14
0 0

你直接执行shell是否返回 预期结果呢?

你把sh里面不等于10改小来测试一下,看看是否是参数传的问题。我直接使用-ne 1来测试是正常返回。

把你执行shell的完整代码贴上了。

2011年8月22日 22:38

相关推荐

    使用runtime实现linux命令行或shell脚本多次调用

    使用runtime, 实现java客户端多次调用linux命令或者shell脚本,并返回对应结果或信息

    java调用shell脚本执行sqlldr与存储过程

    在linux环境中,这三个用户都可以直接在任意目录下执行该shell脚本,可是在java代码中调用shell脚本时,报了如下4个错误: 1、sqlldr: command not found 2、sqlplus: command not found 3、0750: You may need to ...

    java运行shell脚本方法示例

    利用Runtime.execute方法,我们可以在Java程序中运行Linux的Shell脚本,或者执行其他程序

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    1000个【易语言模块大全汇总批量下载】

    2005-10-21 15:30 2624 1221 易语言模块大全\DOS命令模块.ec 2002-07-28 03:41 1551 538 易语言模块大全\EC.EC 2005-12-30 21:58 43618 8803 易语言模块大全\EdbServer1.0客户端.ec 2006-05-22 07:03 30865 7639 ...

    1345个易语言模块

    取文件时 间.ec 取文件版本信息.ec 取文件目录列表.ec 取文件相关联的图标.ec 取文件行数.ec 取文本行数.ec 取 易模块信息.ec 取易模块信息2005.ec 取歌词.ec 取汇编指令长度.ec 取汉字代码.ec 取汉字全拼音模 块.ec...

    易语言模块大全汇总批量下载

    2005-10-21 15:30 2624 1221 易语言模块大全\DOS命令模块.ec 2002-07-28 03:41 1551 538 易语言模块大全\EC.EC 2005-12-30 21:58 43618 8803 易语言模块大全\EdbServer1.0客户端.ec 2006-05-22 07:03 30865 7639 ...

    audioseva

    将私钥JSON文件保存在计算机上的某个位置。 您可以在系统中全局设置GOOGLE_APPLICATION_CREDENTIALS环境变量,也可以在运行其他命令之前将其导出到命令外壳中。 在functions文件夹中运行firebase functions:...

    E语言1000模块

    2005-10-21 15:30 2624 1221 易语言模块大全\DOS命令模块.ec 2002-07-28 03:41 1551 538 易语言模块大全\EC.EC 2005-12-30 21:58 43618 8803 易语言模块大全\EdbServer1.0客户端.ec 2006-05-22 07:03 30865 7639 ...

    java 读取注册表 很好用的

    调用runtime来执行注册表查询 private static final String PERSONAL_FOLDER_CMD = REGQUERY_UTIL + "\"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\" + "Explorer\\Shell Folders\" /v Personal"; ...

    NT Locale Emulator Advance (中文名稱: NT全域通)

    Q:我看到了两个可执行文件,应该怎样使用它们? A:直接运行ntleac.exe,或者为它建立一个快捷方式,并在命令行的末尾填上目标程序的全路径名。关于参数的详细说明请参考附录,在新的版本中您还可以使用名为...

    易语言模块914个

    判断XP外观支持文件是否存在.ec 判断字符模块.ec 判断数据库.ec 判断进程是否存在的模块.ec 到文本.ec 办公组件密码管理模块.ec 功能集一模块 1.0.ec 功能集一模块.ec 加入好友.ec 加密.ec 加密解密文本....

    OneKeyTools:Android One Key Tool,帮助开发者能够更加便捷,快速高效的便捷工具

    执行以下该指令://获取root权限su//更改adb调试模式为tcp,并指定5555端口setprop service.adb.tcp.port 5555//停止adbd服务器stop adbd//启动adbd服务器start adbd###java层面调用shelljava提供了调用系统层级的命令...

    1350多个精品易语言模块

    取文件时 间.ec 取文件版本信息.ec 取文件目录列表.ec 取文件相关联的图标.ec 取文件行数.ec 取文本行数.ec 取 易模块信息.ec 取易模块信息2005.ec 取歌词.ec 取汇编指令长度.ec 取汉字代码.ec 取汉字全拼音模 块.ec...

    790个易模块-3

    调用外部命令.ec 调整窗口大小.ec 定时提醒1.1.ec 动画窗体1.3.ec 动态调用DLL函数.ec 动态调整分辩率.ec 动态加载菜单模块1.0版.ec 动态显示窗口.ec 读取DBF数据.ec 读取超级列表框模块 1.0.ec 读取超级...

    790个易模块打包下载-2

    调用外部命令.ec 调整窗口大小.ec 定时提醒1.1.ec 动画窗体1.3.ec 动态调用DLL函数.ec 动态调整分辩率.ec 动态加载菜单模块1.0版.ec 动态显示窗口.ec 读取DBF数据.ec 读取超级列表框模块 1.0.ec 读取超级...

    790个易模块打包

    调用外部命令.ec 调整窗口大小.ec 定时提醒1.1.ec 动画窗体1.3.ec 动态调用DLL函数.ec 动态调整分辩率.ec 动态加载菜单模块1.0版.ec 动态显示窗口.ec 读取DBF数据.ec 读取超级列表框模块 1.0.ec 读取超级...

Global site tag (gtag.js) - Google Analytics