java.io.IOException: Cannot run program error=2, No such file or directory
Ich habe eine java-Klasse in das nenne ich mal eine runshellscript Methode, ein Skript auszuführen. Es funktionierte gut mit mysql, aber ich kann nicht scheinen, um herauszufinden, warum es nicht gut funktioniert mit psql. Hier ist ein Auszug meiner runshell-Methode:
public class RunShellScript {
public static void runShellScript (String unixCommand)
{
try {
Runtime runtime=Runtime.getRuntime();
//Process process=runtime.exec(new String [] { "/bin/csh", "-c", unixCommand});
Process process=runtime.exec(new String [] {unixCommand});
InputStream stderr=process.getErrorStream();
InputStreamReader isr=new InputStreamReader (stderr);
BufferedReader br=new BufferedReader (isr);
String line=null;
System.out.println("<ERROR>");
while((line=br.readLine())!=null)
System.out.println(line);
System.out.println(line);
int exitVal=process.waitFor();
System.out.println("Process exitValue:" + exitVal);
}
catch (Throwable t)
{
t.printStackTrace();
}
das problem ist, dass wenn ich diese hinter einer Maus geklickt Veranstaltung es sagt Befehl nicht gefunden. Hier ist der code beuind mous-event
private void jMenuItem13MousePressed(java.awt.event.MouseEvent evt) {
String shellCommand="vobs/tools/Scripts/DataValidation/mysqlconnection.csh";
RunShellScript.runShellScript(shellCommand);
// TODO add your handling code here:
}
Komisch ist, dass wenn ich direkt in das Verzeichnis, wo das Skript gespeichert ist, und geben Sie ./mysqlconnection das script funktioniert. Aber wenn ich tippe einfach mysqlconnection ist, sagt "Befehl nicht gefunden". Irgendwie ist es nicht zu erkennen, mein Skript als Befehl?
InformationsquelleAutor rambokayambo | 2012-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aussieht, ist es ähnlich dem problem, das ich konfrontiert ist, dass beim Aufruf ein shell-Skript (enthält system - & Benutzer erstellte Befehle) von autosys [autosys -> shell -> Java -> ProcessBuilder]
ProcessBuilder
wird aus einem Befehl und ausführen in Linux-Maschine.Diese funktionierte, wenn ich mich einloggen, um Linux-box und führen Sie das Skript aus, aber es funktionierte nicht, wenn ich rufe von autosys.
Das eigentliche problem ist
$PATH
variable, die ist nicht eingestellt mit dem Verzeichnis des Benutzers angelegt Befehl.Ich echo $PATH variable bei der Ausführung von Linux-Maschine und Autosys in dem shell-script, $PATH-variable nicht richtig eingestellt ist, wenn die Ausführung von Autosys , nach anfügen user-command-path $PATH-variable es funktionierte.
which (cmd)
wird wieder das Verzeichnis mit dem Befehl, fügen Sie dieses Verzeichnis mit $PATH, dann wird es funktionieren.Versuchen Sie, Ihr Skript Pfad $PFAD und führen Sie aus Ihrer Anwendung
InformationsquelleAutor Saravana
Auf unix-artigen Systemen ist die shell nur Programme ausführt, die Ihren Wohnsitz in das aktuelle Verzeichnis, wenn gegeben, einen eindeutigen Pfad. Dies ist zu verhindern, dass ein Angreifer, sagen wir, setzen ein Programm namens
ls
in Ihrem home-Verzeichnis, die ausgeführt wird, anstatt die tatsächlichenls
Programm mit Wohnsitz in/bin/ls
. So, das aktuelle Verzeichnis ist ausgeschlossen aus dem WEG.Versuchen Sie auch, bewegen
sich über die
while
Schleife.Sollten Sie verwenden
./mysqlconnection
im code stattmysqlconnection
habe ich versucht...aber es funktioniert nicht. So Sie vorschlagen, der Weg, den ich vergeben meine string-variable sein sollte vobs/tools/Scripts/DataValidation/.mysqlconnection.csh";
Was passiert, wenn Sie laufen
csh -c vobs/tools/Scripts/DataValidation/mysqlconnection.csh
?es hat nicht funktioniert...es immer noch geben mir die Fehlermeldung "Befehl nicht gefunden"
InformationsquelleAutor ikdc