Java Runtime.exec() 不支持 Linux 别名



我有一个编译的第三方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

原因是别名属于交互式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'"

最新更新