Java Runtime.exec() 不支持 Linux 别名
Java Runtime.exec() doesn't honor Linux alias
我有一个已编译的第三方 java 程序,它使用 Runtime.exec() 来生成一个进程,但我想在进程开始使用别名时向该进程添加额外的参数,但是 Java Runtime.exec() 好像不兑现。我尝试了自己的程序,但仍然无法正常工作,有什么帮助吗?
import java.io.*;
public class Exec {
public static void main(String args[]) {
try {
String line;
Process p = Runtime.getRuntime().exec(args[0]);
BufferedReader bri = new BufferedReader
(new InputStreamReader(p.getInputStream()));
BufferedReader bre = new BufferedReader
(new InputStreamReader(p.getErrorStream()));
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
bri.close();
while ((line = bre.readLine()) != null) {
System.out.println(line);
}
bre.close();
p.waitFor();
System.out.println("Done.");
}
catch (Exception err) {
err.printStackTrace();
}
}
}
输出:
alias ls='ls -ltr'
java Exec ls
Exec.class
Exec.java
ls
-rw-r--r-- 1 user staff 1216 May 16 09:40 Exec.class
-rw-r--r-- 1 user staff 710 May 16 09:41 Exec.java
原因是alias属于交互shell进程,java看不到
你可以在这里看到详细信息https://unix.stackexchange.com/questions/1496/why-doesnt-my-bash-script-recognize-aliases
如果要执行别名:
你的 shell 是 bash
java Exec "bash -i -c 'ls'"
你的 shell 是 zsh
java Exec "zsh -i -c 'ls'"
我有一个已编译的第三方 java 程序,它使用 Runtime.exec() 来生成一个进程,但我想在进程开始使用别名时向该进程添加额外的参数,但是 Java Runtime.exec() 好像不兑现。我尝试了自己的程序,但仍然无法正常工作,有什么帮助吗?
import java.io.*;
public class Exec {
public static void main(String args[]) {
try {
String line;
Process p = Runtime.getRuntime().exec(args[0]);
BufferedReader bri = new BufferedReader
(new InputStreamReader(p.getInputStream()));
BufferedReader bre = new BufferedReader
(new InputStreamReader(p.getErrorStream()));
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
bri.close();
while ((line = bre.readLine()) != null) {
System.out.println(line);
}
bre.close();
p.waitFor();
System.out.println("Done.");
}
catch (Exception err) {
err.printStackTrace();
}
}
}
输出:
alias ls='ls -ltr'
java Exec ls
Exec.class
Exec.java
ls
-rw-r--r-- 1 user staff 1216 May 16 09:40 Exec.class
-rw-r--r-- 1 user staff 710 May 16 09:41 Exec.java
原因是alias属于交互shell进程,java看不到
你可以在这里看到详细信息https://unix.stackexchange.com/questions/1496/why-doesnt-my-bash-script-recognize-aliases
如果要执行别名:
你的 shell 是 bash
java Exec "bash -i -c 'ls'"
你的 shell 是 zsh
java Exec "zsh -i -c 'ls'"