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

person user1370642    schedule 16.05.2015    source источник


Ответы (1)


Причина в том, что псевдоним принадлежит процессу интерактивной оболочки, поэтому java его не видит.

Вы можете увидеть подробности здесь https://unix.stackexchange.com/questions/1496/why-doesnt-my-bash-script-recognize-aliases

Если вы хотите выполнить псевдоним:

Ваша оболочка - bash java Exec "bash -i -c 'ls'"

Ваша оболочка zsh java Exec "zsh -i -c 'ls'"

person hyo1411    schedule 16.05.2015