• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java PATH auslesen

Thorsten-K

Jonagold
Registriert
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
 

The-Kenny

Transparent von Croncels
Registriert
22.05.08
Beiträge
307
Wie komme ich aus Java an den gesamten Pfad? Ich vermute, er wird aus der .profile oder .bash_rc erweitert. ...

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.
 

Thorsten-K

Jonagold
Registriert
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
 

macduke

Erdapfel
Registriert
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;
	}