1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java PATH auslesen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Thorsten-K, 02.11.08.

  1. Thorsten-K

    Thorsten-K Jonagold

    Dabei seit:
    11.08.05
    Beiträge:
    23
    Hallo,

    ich habe ein kleines Problem den Pfad aus Java heraus auszulesen.

    System.out.println(System.getenv("PATH"));
    ---> /usr/bin:/bin:/usr/sbin:/sbin

    Im Terminal gibt es jedoch weitere Einträge: echo $PATH
    ---> /sw/bin:/sw/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/bin:/usr/texbin:/usr/X11R6/bin

    Wie komme ich aus Java an den gesamten Pfad? Ich vermute, er wird aus der .profile oder .bash_rc erweitert. ...

    Vielen Dank
    Thorsten
     
  2. The-Kenny

    The-Kenny Transparent von Croncels

    Dabei seit:
    22.05.08
    Beiträge:
    307
    Damit wirst du recht haben.

    Ob Java eine native Funktion dafür anbietet, glaube ich eher nicht. Aber vielleicht kommst du durch starten einer neuen Shell per System.execute() und durch ausführen (Und Abfangen der Ausgabe) von "echo $PATH" in dieser Shell an das gewünschte Ergebnis.

    Alternative wäre vielleicht noch, die .bash_rc selber zu parsen - wäre allerdings etwas umständlich.
     
  3. Thorsten-K

    Thorsten-K Jonagold

    Dabei seit:
    11.08.05
    Beiträge:
    23
    Hallo Kenny.

    Stimmt, aber die .bash_rc zu parsen wäre nicht nur umständlich, sondern auch fehleranfällig. An System.execute() habe ich auch schon gedacht, aber die Ergebnisse sind leider nicht so, wie gedacht :(

    echo $PATH -> $PATH
    sh -c echo $PATH --> (leer)
    sh -c \"echo $PATH\" --> (nichts? kein stdout/stderr ??)


    Grüße
    Thorsten
     
  4. macduke

    macduke Erdapfel

    Dabei seit:
    04.11.08
    Beiträge:
    2
    Code:
    	public BufferedReader runCommand(String[] cmd, final int timeout) throws Throwable {
    
    		final String[] command = cmd;
    
    		final Thread runcmd = new Thread() {
    			@Override
    			public void run() {
    				try {
    					String s = null;
    					ExecuteCommand.this.process = Runtime.getRuntime().exec(
    							command);					
    					if(timeout > 0) {
    						long startTime = System.currentTimeMillis();
    						while(System.currentTimeMillis() - startTime < timeout) {
    							try {
    								process.exitValue();
    								break;
    							} catch(IllegalThreadStateException e) {
    							}
    							try {
    								Thread.sleep(50);
    							} catch(InterruptedException e) {
    							}
    						}
    						try {
    							process.exitValue();
    							int i = process.exitValue();
    							if (i == 0) {
    								cmdOutput = new BufferedReader(
    										new InputStreamReader(
    												ExecuteCommand.this.process
    														.getInputStream()));
    							}
    							else {
    								ExecuteCommand.this.cmdErrOutput = new BufferedReader(
    										new InputStreamReader(
    												ExecuteCommand.this.process
    														.getErrorStream()));
    								// read the output from the command
    								while ((s = ExecuteCommand.this.cmdErrOutput
    										.readLine()) != null) {
    									System.err.println(s);
    								}
    							}
    						} catch(IllegalThreadStateException e) {
    							System.err.println("Command: " + command[2]
    									+ " did not terminate in time");
    							process.destroy();
    							process.waitFor();
    							cmdOutput = null;
    						}
    					
    					} else {
    						int i = ExecuteCommand.this.process.waitFor();
    						if (i == 0) {
    							cmdOutput = new BufferedReader(
    									new InputStreamReader(
    											ExecuteCommand.this.process
    													.getInputStream()));
    						}
    						else {
    							ExecuteCommand.this.cmdErrOutput = new BufferedReader(
    									new InputStreamReader(
    											ExecuteCommand.this.process
    													.getErrorStream()));
    							// read the output from the command
    							while ((s = ExecuteCommand.this.cmdErrOutput
    									.readLine()) != null) {
    								System.err.println(s);
    							}
    						}
    					}
    				}
    				catch (Exception e) {
    					System.err.println(e);
    				}
    			}
    		};
    
    		runcmd.start();
    		runcmd.join(TIMEOUT);
    
    		return cmdOutput;
    	}
     

Diese Seite empfehlen