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.exec(String command)`方法用于执行单个命令,而如果需要执行包含多个命令的shell脚本,可以使用`Runtime.exec(String[] cmdArray)`,其中cmdArray是一个包含命令及其参数的字符串数组。 下面是一个简单的...

    java调用shell(包含有参数的调用)

    在某些情况下,Java程序需要调用Shell脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些任务。本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本...

    java调用shell命令.pdf

    在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的必要性 在实际开发中,...

    Android程序中(APK程序)执行Adb shell 命令

    在高级语言如Java或Kotlin中调用shell命令,虽然方便但也存在一些风险,比如可能引入安全漏洞。因此,除非必要,否则应尽量避免在应用程序中使用shell命令,而是利用Android SDK提供的安全且封装好的API。 综上所述...

    android系统中调用shell脚本

    10. **异常处理**:在调用shell脚本时,要处理可能出现的IOException、InterruptedException等异常,确保程序的健壮性。 以上就是关于在Android系统中调用shell脚本的一些关键知识点。实践中,开发者需要根据具体...

    android 给app授权 执行shell命令

    在Android平台上,有时候开发者需要超越普通应用程序的权限范围,例如执行系统级别的操作,这就涉及到给APP授权和执行Shell命令。Android系统默认是以安全为优先,不允许应用无限制地执行shell命令,但通过获取Root...

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

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

    android执行shell命令

    在编写shell脚本或命令时,要确保命令在Android环境下是兼容的。 - **日志输出**:通过`logcat`命令可以查看设备的日志输出,这对于调试和理解命令执行结果非常有帮助。 - **性能影响**:频繁或长时间的shell命令...

    Java 调用 Shell 命令

    2. **调用Shell脚本**:通过Java的`Runtime.getRuntime().exec()`方法来执行Shell命令或脚本。 下面是一个具体的Java类实现示例,用于调用Shell脚本并记录执行日志: ```java import java.io.*; import java.text....

    java调用shell向DataX传参,带where条件,特殊字符

    在Java程序中调用Shell命令并传入带有特殊字符的参数时,会遇到一些挑战,因为Shell和DataX对特殊字符的处理方式可能不同。 首先,让我们理解Java如何调用Shell命令。在Java中,我们可以使用Runtime或者...

    JAVA执行shell命令小工具

    在给定的描述中,虽然没有提供具体的信息,但我们可以推测这篇博文可能是博主Qindongliang分享的一个实用工具,可能包括如何在Java代码中构建和使用这样的工具,以及解决在执行Shell命令时可能遇到的问题。...

    android执行adb shell命令源码

    在原生层执行`adb shell`命令,我们需要调用`system()`函数或`popen()`函数。例如: ```c++ #include #include int executeShellCommand(const char* command) { FILE* pipe = popen(command, "r"); if (!pipe...

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    在Java编程中,经常需要执行一些外部的可执行文件或者脚本(如bat或shell脚本)。本文将详细介绍三种常用的方法:`Runtime.exec()`、`ProcessBuilder`以及`commons-exec`库。 #### 1. 使用`Runtime.exec()` `...

    java调用shell脚本

    在IT行业中,尤其是在服务器管理和自动化任务执行的场景下,经常需要使用编程语言调用操作系统级别的命令,例如Shell脚本。Java作为一种跨平台的编程语言,提供了多种方式来调用Shell脚本,实现与操作系统的交互。...

    调用外部命令.rar

    在编程和系统管理中,调用外部命令是一个常见的操作,特别是在需要执行操作系统级别的任务或集成不同应用程序时。这个“调用外部命令.rar”文件可能包含了关于如何在不同环境中执行这一操作的相关资料。以下是对这个...

    java调用shell向DataX传递参数,where条件,包含特殊字符

    总之,Java调用shell脚本向DataX传递参数,尤其是在where条件中包含特殊字符时,需要关注字符串转义、shell命令构建以及安全问题。同时,合理设计和使用配置文件能有效提高代码的灵活性和可维护性。

    java调用shell

    `Runtime.getRuntime().exec(command)`方法接受一个字符串参数或字符串数组作为命令行指令,创建一个新的进程来执行这些指令,并返回一个`Process`对象,该对象可用于控制新进程并获取其输出和错误流。 ### 实现...

    利用app_process实现免root调用shell_Java_下载.zip

    要利用`app_process`执行shell命令,我们需要创建一个自定义的Java类,并在该类中调用`Runtime.getRuntime().exec()`方法来执行shell命令。以下是一个简单的示例: ```java public class ShellExecutor { public ...

    java调用shell命令并获取执行结果的示例

    Java调用Shell命令并获取执行结果的示例 在 Java 中调用 Shell 命令并获取执行结果是非常常见的操作,今天我们就来分享一个 Java 调用 Shell 命令并获取执行结果的示例。 Process 和 Runtime 类 在 Java 中,我们...

    java Sokcet远程调用shell

    Java Socket远程调用Shell是一种通过Java程序利用Socket通信协议实现对远程服务器的Shell命令执行的技术。这种方式常用于系统管理、自动化运维或者分布式系统的组件交互。下面将详细介绍这一技术的实现原理、步骤...

Global site tag (gtag.js) - Google Analytics