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

标签 java linux process alias spawn

我有一个已编译的第三方 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 执行“bash -i -c 'ls'”

你的 shell 是 zsh java 执行 "zsh -i -c 'ls'"

关于Java Runtime.exec() 不支持 Linux 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278301/

相关文章:

java - Geomesa-utils : How to choose ResolutionRange

java - 读取apk文件AndroidManifest.xml

c - 从 fork() 返回 -1

c# - 从 C# 中的进程读取环境变量

java - 如何检查其他方法内的语句

java - 这个正则表达式是如何工作的?

C 程序(malloc)未在 ubuntu 11.04 中编译

linux - 文件系统 "see"是否作为(非常大的)字节数组存储设备?

tcp - 进程和 TCPSocket 在 Crystal 中没有正确关闭

c - 有没有计算进程运行时间的C函数?