-
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个答案 按时间排序 按投票排序
-
采纳的答案
引用且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
-
你直接执行shell是否返回 预期结果呢?
你把sh里面不等于10改小来测试一下,看看是否是参数传的问题。我直接使用-ne 1来测试是正常返回。
把你执行shell的完整代码贴上了。2011年8月22日 22:38
相关推荐
`Runtime.exec(String command)`方法用于执行单个命令,而如果需要执行包含多个命令的shell脚本,可以使用`Runtime.exec(String[] cmdArray)`,其中cmdArray是一个包含命令及其参数的字符串数组。 下面是一个简单的...
在某些情况下,Java程序需要调用Shell脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些任务。本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本...
在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的必要性 在实际开发中,...
在高级语言如Java或Kotlin中调用shell命令,虽然方便但也存在一些风险,比如可能引入安全漏洞。因此,除非必要,否则应尽量避免在应用程序中使用shell命令,而是利用Android SDK提供的安全且封装好的API。 综上所述...
10. **异常处理**:在调用shell脚本时,要处理可能出现的IOException、InterruptedException等异常,确保程序的健壮性。 以上就是关于在Android系统中调用shell脚本的一些关键知识点。实践中,开发者需要根据具体...
在Android平台上,有时候开发者需要超越普通应用程序的权限范围,例如执行系统级别的操作,这就涉及到给APP授权和执行Shell命令。Android系统默认是以安全为优先,不允许应用无限制地执行shell命令,但通过获取Root...
在linux环境中,这三个用户都可以直接在任意目录下执行该shell脚本,可是在java代码中调用shell脚本时,报了如下4个错误: 1、sqlldr: command not found 2、sqlplus: command not found 3、0750: You may need to ...
在编写shell脚本或命令时,要确保命令在Android环境下是兼容的。 - **日志输出**:通过`logcat`命令可以查看设备的日志输出,这对于调试和理解命令执行结果非常有帮助。 - **性能影响**:频繁或长时间的shell命令...
2. **调用Shell脚本**:通过Java的`Runtime.getRuntime().exec()`方法来执行Shell命令或脚本。 下面是一个具体的Java类实现示例,用于调用Shell脚本并记录执行日志: ```java import java.io.*; import java.text....
在Java程序中调用Shell命令并传入带有特殊字符的参数时,会遇到一些挑战,因为Shell和DataX对特殊字符的处理方式可能不同。 首先,让我们理解Java如何调用Shell命令。在Java中,我们可以使用Runtime或者...
在给定的描述中,虽然没有提供具体的信息,但我们可以推测这篇博文可能是博主Qindongliang分享的一个实用工具,可能包括如何在Java代码中构建和使用这样的工具,以及解决在执行Shell命令时可能遇到的问题。...
在原生层执行`adb shell`命令,我们需要调用`system()`函数或`popen()`函数。例如: ```c++ #include #include int executeShellCommand(const char* command) { FILE* pipe = popen(command, "r"); if (!pipe...
在Java编程中,经常需要执行一些外部的可执行文件或者脚本(如bat或shell脚本)。本文将详细介绍三种常用的方法:`Runtime.exec()`、`ProcessBuilder`以及`commons-exec`库。 #### 1. 使用`Runtime.exec()` `...
在IT行业中,尤其是在服务器管理和自动化任务执行的场景下,经常需要使用编程语言调用操作系统级别的命令,例如Shell脚本。Java作为一种跨平台的编程语言,提供了多种方式来调用Shell脚本,实现与操作系统的交互。...
在编程和系统管理中,调用外部命令是一个常见的操作,特别是在需要执行操作系统级别的任务或集成不同应用程序时。这个“调用外部命令.rar”文件可能包含了关于如何在不同环境中执行这一操作的相关资料。以下是对这个...
总之,Java调用shell脚本向DataX传递参数,尤其是在where条件中包含特殊字符时,需要关注字符串转义、shell命令构建以及安全问题。同时,合理设计和使用配置文件能有效提高代码的灵活性和可维护性。
`Runtime.getRuntime().exec(command)`方法接受一个字符串参数或字符串数组作为命令行指令,创建一个新的进程来执行这些指令,并返回一个`Process`对象,该对象可用于控制新进程并获取其输出和错误流。 ### 实现...
要利用`app_process`执行shell命令,我们需要创建一个自定义的Java类,并在该类中调用`Runtime.getRuntime().exec()`方法来执行shell命令。以下是一个简单的示例: ```java public class ShellExecutor { public ...
Java调用Shell命令并获取执行结果的示例 在 Java 中调用 Shell 命令并获取执行结果是非常常见的操作,今天我们就来分享一个 Java 调用 Shell 命令并获取执行结果的示例。 Process 和 Runtime 类 在 Java 中,我们...
Java Socket远程调用Shell是一种通过Java程序利用Socket通信协议实现对远程服务器的Shell命令执行的技术。这种方式常用于系统管理、自动化运维或者分布式系统的组件交互。下面将详细介绍这一技术的实现原理、步骤...