跑步时 man
对于几乎所有返回终端命令手册的命令,运行时执行似乎只返回word中的几个字母
预期
OPTIONS
Note that, in order to support obsolescent hardware, unzip's usage
screen is limited to 22 or 23 lines and should therefore be considered
only a reminder of the basic unzip syntax rather than an exhaustive
list of all possible flags. The exhaustive list follows:
java运行时执行返回的输出
OOPPTTIIOONNSS
Note that, in order to support obsolescent hardware, _u_n_z_i_p's usage
screen is limited to 22 or 23 lines and should therefore be considered
only a reminder of the basic _u_n_z_i_p syntax rather than an exhaustive
list of all possible flags. The exhaustive list follows:
下面是我从运行命令中获取op的代码
String[] cmd = {"man unzip"};
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while (true) {
line = in.readLine();
if (line == null) { break;
}System.out.println(line);
}
1条答案
按热度按时间zed5wv101#
runtime.exec已过时。改用processbuilder。
手册页可以包含复杂的标记,包括强调的文本。手册页是使用nroff解释器输出的,这意味着强调的文本会被呈现为发送到旧打印机:一个
A
后跟一个退格字符,后跟另一个A
实际上是双重打击A
,终端足够聪明,可以呈现为粗体字符。同样地,_
后跟退格字符,后跟A
结果在终端中出现带下划线的字符,就像在旧打印机上一样。最简单的解决方案是将
man
通过猫。nroff解释器将看到输出目的地是另一个进程,而不是终端,并且根本不会尝试呈现粗体或带下划线的文本:注意使用
redirectOutput
以及redirectError
. 当给定inherit参数时,这些方法分别导致由processbuilder创建的任何进程的标准输出和标准错误出现在程序自己的标准输出或标准错误中。这样就不需要显式地读取输出并打印它。在java 8中,processbuilder.startpipeline和list.of不可用。与java 8兼容的实现方法是使用shell作为管道:
在本例中,inheritio()执行与
redirectOutput(INHERIT)
以及redirectError(INHERIT)
合并:外部进程的标准输出和标准错误出现在java进程自己的标准输出和标准错误中,因此不需要显式地读取和打印输出。