1.Java调用shell
Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运
行的环境交互的接口,这就是Runtime类,在Runtime类里提供了获取当前运行环境的接口。
其中的exec函数返回一个执行shell命令的子进程。exec函数的具体实现形式有以下几种:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws
IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我们在这里主要用到的是第一个和第四个函数,具体方法很简单,就是在exec函数中传递一个代表命令的字符串。exec函数返回的是一个Process类
型的类的实例。Process类主要用来控制进程,获取进程信息等作用。(具体信息及其用法请参看Java doc)。
1)执行简单的命令的方法:
代码如下:
try
String commands = "ls -l";
Process process = Runtime.getRuntime().exec (commands);
// for showing the info on screen
InputStreamReader ir=new
InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line);
}//end try
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
} 上面的代码首先是声明了一个代表命令的字符串commands,它代表了ls -l
这个命令。之后我们用Runtime.getRuntime().exec(commands)来生成一个子进程来执行这个命令,如果这句话运行成功,则
命令 ls -l 运行成功(由于没有让它显示,不会显示ls -l
的结果)。后面的流操作则是获取进程的流信息,并把它们一行行输出到屏幕。2)执行带有参数的命令(尤其是参数需要用引号的)时则需要用String的数组来表示整个命令,而且要用转义符把引号的特殊含义去除,例如我们要执行
find / -name "*mysql*" -print 时,用如下代码
try
String[] commands = new
String[]{"find",".","-name","*mysql*","-print"};
Process process = Runtime.getRuntime().exec (commands);
InputStreamReader ir=new
InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line);
}//end try
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
Java 可以通过 Runtime 调用Linux命令,形式如下:
Runtime.getRuntime().exec(command)
但是这样执行时没有任何输出,因为调用 Runtime.exec 方法将产生一个本地的进程,并返回一个Process子类的实例(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例)该实例可用于控制进程或取得进程的相关信息。
由于调用 Runtime.exec 方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过 Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向给它的父进程了。
用户需要用这些stream来向子进程输入数据或获取子进程的输出,下面的代码可以取到 linux 命令的执行结果:
try {
String[] cmd = new String[]{”/bin/sh”, “-c”, ” ls “};
Process ps = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(”\n”);
}
String result = sb.toString();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
转:http://wangbaoaiboy.blog.163.com/blog/static/52111910201111892938552/
2.在本地执行hive
<!--StartFragment -->
source /home/zjq/hive_utils.sh
#hive_proc "use clickwise;
<!--StartFragment -->
#!/bin/bash
hive_proc(){
runtime=`date +%Y%m%d%k`
ql="$1"
source /etc/profile
/usr/lib/hive/bin/hive -e "$ql"
if [ $? -ne 0 ];then
echo -e $runtime"error: query is error" >& 2
echo "$ql" >& 2
exit 1
fi
}
nohup sh shell.sh &
会生成 nohup.out 输出文件
相关推荐
【内镜医生工作总结】 内镜医生的工作总结是对个人在内镜诊疗领域的工作表现进行回顾和反思的文本,旨在总结经验,提升专业技能和服务质量。在20_年的工作中,新生儿科内镜医生团队在医院领导的支持下,积极参与...
医院新生儿科个人工作总结精选多篇.pdf 本文是医院新生儿科个人工作总结精选多篇的报告,涵盖了新生儿科过去一年的工作总结、存在问题和未来的工作计划。报告中列出了新生儿科在过去一年中的各种成就,包括收治病人...
校团委会通讯组的工作总结为我们提供了一个深入理解校园通讯工作实践和成效的窗口。通过对2010年9月至2011年6月期间通讯组的工作回顾与反思,我们可以把握到其在信息传递、新闻报道及服务师生等多方面的工作内容、...
通过上述总结,我们可以看出该连队在2011年的植保工作中取得了显著的成绩,尤其是在棉铃虫、棉蚜、棉叶螨和棉花枯黄萎病的防治方面表现突出。这些成果得益于连队领导的高度重视、科学合理的防治措施以及全员动员的...
### CC1120 数据手册知识点总结 #### 一、CC1120 概述 - **定义**: CC1120 是一款专为窄带系统设计的高性能射频收发器,适用于多种低功耗无线应用。 - **集成度**: 完全集成的单芯片设计,内部集成了所有必要的...
总结来说,Marvell 88NV1120 MPTool 2019.07.25版是专为Toshiba A19nm TLC NAND闪存设计的固态硬盘管理工具,它为用户提供了全面的SSD维护和优化功能,确保了基于88NV1120主控的SSD在使用过程中具有良好的性能和稳定...
### IPU总结报告v2.0 - 应用程序与驱动程序交互机制解析 #### 研究背景及目的 本报告旨在从应用程序的角度出发,深入研究基于mxc_v4l2_capture.c的应用程序及其与IPU驱动程序的交互过程。通过对mxc_v4l2_capture.c...
### LBP1120激光打印机用户指南关键知识点解析 #### 一、概述 ...通过仔细阅读并遵循指南中的说明,用户可以充分利用佳能LBP1120激光打印机的所有功能,提高工作效率,解决日常打印中遇到的问题。
总结,ADS1160和ADS1120是高精度的模拟数字转换器,各自在高速和低功耗方面有优势,广泛应用于需要精确信号转换的领域。在实际应用中,系统设计师需要综合考虑性能、功耗、成本和接口需求等因素,选择合适的ADC模型...
总结来说,“88NV1120 1.0.0.17 Firmware Update V1”是一个旨在提升设备性能、稳定性、兼容性和安全性的固件更新,对于拥有该型号芯片的用户而言,安装此更新无疑是提升设备综合表现的有效途径。因此,保持固件的...
【社会保险稽查工作个人总结】 2021年度的社会保险稽查工作取得了显著成效,主要体现在以下几个方面: 1. 养老保险发放:全年共发放养老金8099万元,覆盖了4553名离退休人员、689名遗属人员及7188名享受待遇的农...
5. **电气规格**:提供了Si1120的绝对最大值等级与推荐操作条件,例如供电电压范围、最大工作电流等。 #### 五、总结 Si1120是一款高性能、多功能的接近光与环境光感应器,其独特的设计使其在众多领域中都表现出色...
此外,文档还提到了仓库管理员的工作总结,强调了制造业中成本控制的重要性,以及在工作中提升效率、细化管理的必要性,以实现生产服务的优化。 这份总结既是对过去一年工作的全面回顾,也是对未来的规划和展望,...
【毕业论文jsp1120备品备件管理系统ssh.doc】是一篇关于使用Java技术开发备品备件管理系统的详细论文。这篇论文涵盖了从项目概述到系统实现的多个关键环节,旨在阐述如何运用JSP(Java Server Pages)技术构建一个...
### 总结 TPS1120DRG4-VB是一款高性能的双通道P-Channel MOSFET,其采用了先进的TrenchFET®技术,能够有效降低导通电阻,提高效率,并且支持高达-30V的漏源电压。这款器件非常适合应用于需要高效率和可靠性的电源...
LT8718是一款由龙迅...总结来说,LT8718是一款高性能、多功能的视频桥接芯片,它的主要特点在于其对多种视频和音频格式的支持,以及对DisplayPort 1.2标准的兼容,适用于需要将TTL信号转换为DP输出的各类电子设备。
【2017年1120公司信息化建设规划设计方案】 一、企业信息化现状 宜诺包装(XX)股份有限公司的信息化建设当前面临的主要问题是“信息孤岛”现象。随着公司的快速发展,信息化管理虽已引入,但由于缺乏整体的部署...
XXXXXXXX1120ERP软件II-电脑业务(财务单据)gjy.pptx 这份PPT文件主要介绍了企业典型业务单据流程模拟,包括电脑业务、财务系统单据填写示例、典型业务单据流程等部分。下面是对该文件的详细知识点总结: 一、...
文档"财务总结(1).doc"是一份关于2006年前三个季度的财务报告,主要涵盖财务估算执行情况、财务部门各项任务完成情况以及存在的问题和下一季度的重点工作。以下是对这些内容的详细说明: 一、财务估算执行状况 在...
1. 连铸机参数与工作模式:文件中提及了各种连铸机相关的尺寸参数,例如不同的拉坯速度(6-800mm/min)、拉坯直径(300mm、450mm、1246mm等)、以及断面尺寸(如120t、30t等),这些参数直接关联到连铸机的工作效率...