All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blade.kit.ShellKit Maven / Gradle / Ivy

There is a newer version: 1.4.1-beta
Show newest version
/**
 * Copyright (c) 2015, biezhi 王爵 ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * 	http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.blade.kit;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

/**
 * shell操作
 * 

*

* * @author biezhi * @since 1.0 */ public class ShellKit { /** * check whether has root permission */ public static boolean hasRootPermission() { return execCommand("echo root", true, false).result == 0; } public static CommandResult execCommand(String command, boolean isRoot) { return execCommand(new String[] {command}, isRoot, true); } public static CommandResult execCommand(String command, boolean isRoot, boolean isNeedResultMsg) { return execCommand(new String[]{command}, isRoot, isNeedResultMsg); } public static CommandResult execCommand(List commands, boolean isRoot, boolean isNeedResultMsg) { return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, isNeedResultMsg); } /** * execute shell commands * {@link CommandResult#result} is -1, there maybe some excepiton. * * @param commands command array * @param isRoot whether need to run with root * @param needResponse whether need result msg */ public static CommandResult execCommand(String[] commands, boolean isRoot, boolean needResponse) { int result = -1; if (commands == null || commands.length == 0) { return new CommandResult(result, null, "空命令"); } Process process = null; BufferedReader successResult = null; BufferedReader errorResult = null; StringBuilder successMsg = null; StringBuilder errorMsg = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH); os = new DataOutputStream(process.getOutputStream()); for (String command : commands) { if (command == null) { continue; } // donnot use os.writeBytes(commmand), avoid chinese charset error os.write(command.getBytes()); os.writeBytes(COMMAND_LINE_END); os.flush(); } os.writeBytes(COMMAND_EXIT); os.flush(); result = process.waitFor(); if (needResponse) { successMsg = new StringBuilder(); errorMsg = new StringBuilder(); successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); String s; while ((s = successResult.readLine()) != null) { successMsg.append(s); } while ((s = errorResult.readLine()) != null) { errorMsg.append(s); } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (errorResult != null) { errorResult.close(); } if (successResult != null) { successResult.close(); } if (os != null) { os.close(); } } catch (IOException e) { e.printStackTrace(); } finally { if (process != null) { process.destroy(); } } } return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null : errorMsg.toString()); } public static class CommandResult { public int result; public String responseMsg; public String errorMsg; public CommandResult(int result) { this.result = result; } public CommandResult(int result, String responseMsg, String errorMsg) { this.result = result; this.responseMsg = responseMsg; this.errorMsg = errorMsg; } } public static final String COMMAND_SU = "su"; public static final String COMMAND_SH = "sh"; public static final String COMMAND_EXIT = "exit\n"; public static final String COMMAND_LINE_END = "\n"; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy