# per java bash script ausführen



## Don83 (29. Jul 2009)

Hi,
ich würde gerne mit einem java programm ein bash script ausführen.
Im endeffekt soll das script nur folgendes machen:
copy von a nach b.
Habe jetzt mal ein bisschen gegoogelt aber irgendwie konnte ich noch nicht finden wie man per java die bash steuert. Wäre da über kleine Hinweise dankbar.:shock:


----------



## Sempah (29. Jul 2009)

Vlt. hilft dir folgendes weiter:


```
Runtime shell = Runtime.getRuntime();
Process prozess = null;
String cmd = "ps";

try {
   prozess = shell.exec(cmd);
} catch (IOException ioe) {
   // ...
}
```


----------



## Don83 (29. Jul 2009)

Danke ,
genau sowas habe ich gesucht!


----------



## Don83 (30. Jul 2009)

Habe an dieser Stelle dann doch noch ein kleines Problem und komme der Sache nicht auf die Schliche:
Also ich habe jetzt einen Befehl in das java Programm eingebettet der mach folgendes:

```
String cmd = "cp " + args[0] + " " + directory;
			// System.out.println(cmd);
			try {
				prozess = shell.exec(cmd);
			} catch (IOException ioe) {

			}
```
Funktioniert wunderbar!

Habe jetzt an anderer Stelle einen weiteren Befehl, falls man mal aufräumen will , und der sollte eigentlich folgendes machen:

```
String cmd = "rm /home/uploadfiles/*";
			// System.out.println(cmd);
			try {
				prozess = shell.exec(cmd);
			} catch (IOException ioe) {
					System.out.println("Cant delete the files");
			}
```

Beim ausführen mit zweiter Option bekomme ich zwar keine Fehlermeldung aber die files im gegebenen Ordner werden auch nicht gelöscht. Wenn ich den Befehl über die Kommandozeile ausführe werden die files aber schon gelöscht, nur über Java funktionierts nicht.
Ist zwar nur ein Optionaler Teil der faulen Menschen bei der Arbeit helfen soll aber finds etwas komisch dass dieser part nicht funktioniert.
Kennt da jemand vielleicht eine Lösung?
Der Übersicht halber nochmal der ganze code:

```
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;
import java.sql.*;

public class Uploader {

	public static String generatePassword() {
		// Generate an 8 digit password
		StringBuilder password = new StringBuilder("");
		for (int i = 0; i < 8; i++) {
			Random randomizer = new Random();
			int value = randomizer.nextInt(92) + 33;
			char ch = (char) value;
			password.append(ch);
		}
		return password.toString();
	}

	public static void main(String[] args) throws SQLException {
		String directory = "/home/uploadfiles";
		Runtime shell = Runtime.getRuntime();
		Process prozess = null;
		if (args[0].equals("clean")) {
			// Delete all elements of the database
			Connection cn = null;
			Statement st = null;
			ResultSet rs = null;
			try {
				Class.forName("com.mysql.jdbc.Driver");
				cn = DriverManager.getConnection(
						"jdbc:mysql://127.0.0.1:3306/upload", "uploader",
						"passwort");
				st = cn.createStatement();
			} catch (Throwable t) {
				t.printStackTrace();
			}
			String truncateStatement = "TRUNCATE TABLE filelist;";
			st.execute(truncateStatement);
			// Delete all files in the upload directory
			String cmd = "rm /home/uploadfiles/*";
			// System.out.println(cmd);
			try {
				prozess = shell.exec(cmd);
			} catch (IOException ioe) {
					System.out.println("Cant delete the files");
			}
			System.out.println("\nAlle upload-files wurden gelöscht!\n");

		} else {
			// Else-Case:Normal Upload modus
			// Copy file from current directory into upload-directory
			
			File file = new File(args[0]);
			String fileName = file.getName();
			//System.out.println(fileName);
			String cmd = "cp " + args[0] + " " + directory;
			// System.out.println(cmd);
			try {
				prozess = shell.exec(cmd);
			} catch (IOException ioe) {

			}

			// Generate an 8 digit password
			String password = generatePassword();
			//System.out.println(password);

			// Fill DB with password and FileName
			Connection cn = null;
			Statement st = null;
			ResultSet rs = null;
			try {
				Class.forName("com.mysql.jdbc.Driver");
				cn = DriverManager.getConnection(
						"jdbc:mysql://127.0.0.1:3306/upload", "uploader",
						"passwort");
				st = cn.createStatement();
			} catch (Throwable t) {
				t.printStackTrace();
			}
			String insertStatement = "INSERT INTO filelist(filename,password) VALUES ('"
					+ fileName + "','" + password + "');";
			st.execute(insertStatement);
			System.out.println("\nDie file \""+fileName+ "\" wurde hochgeladen und kann mit dem Passwort \""+password+"\" unter \"http://IP/uploader/upload.php\" heruntergeladen werden.\n");
		}
	}
}
```


----------

