导航:首页 > 编程语言 > java获取shell返回值

java获取shell返回值

发布时间:2022-07-22 17:20:12

⑴ 使用java连接linux,执行shell命令返回值有乱码,怎么解决

packagecom.pasier.xxx.util;

importjava.io.IOException;
importjava.io.InputStream;
importjava.nio.charset.Charset;

importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;

importch.ethz.ssh2.ChannelCondition;
importch.ethz.ssh2.Connection;
importch.ethz.ssh2.Session;
importch.ethz.ssh2.StreamGobbler;

publicclassRmtShellExecutor{

privatestaticfinalLoggerLOG=LoggerFactory.getLogger(RmtShellExecutor.class);

privateConnectionconn;
privateStringip;
privateStringusr;
privateStringpsword;
privateStringcharset=Charset.defaultCharset().toString();

privatestaticfinalintTIME_OUT=1000*5*60;

publicRmtShellExecutor(Stringip,Stringusr,Stringps){
this.ip=ip;
this.usr=usr;
this.psword=ps;
}

privatebooleanlogin()throwsIOException{
conn=newConnection(ip);
conn.connect();
returnconn.authenticateWithPassword(usr,psword);
}

publicStringexec(Stringcmds)throwsIOException{
InputStreamstdOut=null;
InputStreamstdErr=null;
StringoutStr="";
StringoutErr="";
intret=-1;

try{
if(login()){
Sessionsession=conn.openSession();
session.execCommand(cmds);
stdOut=newStreamGobbler(session.getStdout());
outStr=processStream(stdOut,charset);
LOG.info("caijl:[INFO]outStr="+outStr);
stdErr=newStreamGobbler(session.getStderr());
outErr=processStream(stdErr,charset);
LOG.info("caijl:[INFO]outErr="+outErr);
session.waitForCondition(ChannelCondition.EXIT_STATUS,TIME_OUT);
ret=session.getExitStatus();

}else{
LOG.error("caijl:[INFO]ssh2loginfailure:"+ip);
thrownewIOException("SSH2_ERR");
}

}finally{
if(conn!=null){
conn.close();
}
if(stdOut!=null)
stdOut.close();
if(stdErr!=null)
stdErr.close();
}

returnoutStr;
}

privateStringprocessStream(InputStreamin,Stringcharset)throwsIOException{
byte[]buf=newbyte[1024];
StringBuildersb=newStringBuilder();
while(in.read(buf)!=-1){
sb.append(newString(buf,charset));
}
returnsb.toString();
}

publicstaticvoidmain(String[]args){

Stringusr="root";
Stringpassword="12345";
StringserverIP="11.22.33.xx";
StringshPath="/root/ab.sh";

RmtShellExecutorexe=newRmtShellExecutor(serverIP,usr,password);

StringoutInf;

try{
outInf=exe.exec("sh"+shPath+"xn");
System.out.println("outInf="+outInf);
}catch(IOExceptione){
e.printStackTrace();
}
}

}

⑵ 如何得到shell的返回值

你说的
返回值
是函数的返回值吗还是一条命令的返回值
如果是函数返回值
可以在函数最后用print
或者echo
返回
你要的
返回值。
这样函数内部处理返回值打印就不可以有其他打印,否则影响返回值。
如果是命令执行的返回值也用$()
例子:
function
exmaple1
{
input=$1
#函数有一个输入参数
output="${input}
stringappend"
echo
$output
#
函数的返回值
}
outValue=$(exmaple1
“test”)
#
将函数的返回值赋值给outValue

⑶ java执行带参数的shell脚本并返回值

文件名确实不对
.sh文件才是linux下的批处理文件,它不认bat的
另外要保证.sh中调用的其他函数在当前目录下能正常运行

⑷ java 执行shell 脚本 返回 find的内容~~求助

你先打印pathshell这个变量,看这个变量是不是正确的,如果不正确,当然无法定位到find命令了。
你后面的代码是没有问题的,只能出在这个地方。
还有你的find命令没有参数传入啊,命令参数之类的还是是需要的。

⑸ shell 里面调用 java 怎么取到java地返回值

System.exit(0)这个值,windows下通过 %errorlevel%获取
~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~

⑹ Java解析执行shell命令返回的结果

String s = 那串结果;
String useful = s.substring(s.indexOf("/"));
String[] every = useful.split(" /");
得到的数组就是每个的信息,然后再解析(但要注意,第一个的开头有一个斜线/)

⑺ java 怎么取外部程序运行后的返回值

JAVA 中 process 类的使用
Process是一个抽象类 封装了一个进程
创建 process
Process p = Runtime.getRuntime().exec(cmd); cmd 是字符串类型 也可以是字符串类型的数组 内容就是 命令行
Process p =ProcessBuilder.start();
Process 类提供了子进程的输入流,子进程的输出流子进程的输入流,等待进程完成,检查进程的退出状态以及销毁进程的方法;
创建的子进程没有自己的控制台或终端,其所有的io操作都是通过(输入流、输出流、错误流)重定向到父进程中。
destroy()
杀掉子进程。
exitValue()
返回子进程的出口值。
InputStream getErrorStream()
获得子进程的错误流。
InputStream getInputStream()
获得子进程的输入流。
OutputStream getOutputStream()
获得子进程的输出流。
waitFor()
导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
-------分割线,以上来自网络-------
其中的exitValue()函数返回值就是你需要的东西。按照你的示例,return 12345,取得的值不一定等于12345,因为每个不同的shell对于程序退出的返回值是有自己的定义的,不一定是把程序return的值直接返回。可以查看各类shell的编程帮助。

⑻ java调用shell脚本,并得到shell脚本的返回值

文件名确实不对
.sh文件才是linux下的批处理文件,它不认bat的
另外要保证.sh中调用的其他函数在当前目录下能正常运行

⑼ 如何获取shell函数的返回值及shell命令的返回值

函数 返回值 。使用return 返回出来,调用函数就获取到
shell命令返回值。使用 $?获取

阅读全文

与java获取shell返回值相关的资料

热点内容
pdf画面 浏览:878
文件夹常用命令 浏览:203
被调侃的程序员 浏览:489
哪里有无损音乐app下载 浏览:221
单片机如何使用proteus 浏览:991
java常用的服务器 浏览:281
集结APP在哪里下载 浏览:800
欧洲cf玩什么服务器 浏览:529
如何连接另一台电脑上的共享文件夹 浏览:681
如何让桌面文件夹搬家到e盘 浏览:73
java自动格式化 浏览:619
ipad怎么查看文件夹大小 浏览:583
手工粘土解压球 浏览:552
在线视频教育源码 浏览:41
快四十学什么编程 浏览:754
gnumakelinux 浏览:537
视易峰云服务器怎么改系统 浏览:535
javamap取值 浏览:768
mac和win磁盘加密软件 浏览:474
苹果为什么会连接不到服务器 浏览:726