habe ich ein Shell-Skript (test.sh) mit Java geschrieben. Dieses Shell-Skript führt tatsächlich einen Kopiervorgang von einer Datei zur anderen durch. Nach der Ausführung des Shell-Skripts habe ich das Verzeichnis von Console aus geöffnet und ls eingegeben. Es zeigt die Ausgabedatei mit? nach der Erweiterung.Unix: "ls" Befehl zeigt Dateien mit? nach der Erweiterung
Beispiel: foo.csv?
File execFile = new File(file);
FileWriter fwFile;
try {
fwFile = new FileWriter(execFile);
execFile.setExecutable(true);
BufferedWriter bwFile = new BufferedWriter(fwFile);
bwFile.write(strOutput.substring(0, 2));
bwFile.write("\r\n");
bwFile.write("cd " + strOutput);
bwFile.write("\r\n");
bwFile.write("mkdir " + strOutput);
bwFile.write("\r\n");
bwFile.write(strUnixPath);
bwFile.write("\r\n");
bwFile.write("cd " + strWorkingPath + IPlatinumConstants.FS+"lib"+IPlatinumConstants.FS+"Unx");
bwFile.write("\r\n");
bwFile.write("echo Cut Src Start time %time%");
bwFile.write("\r\n");
bwFile.write("cp " + " \"" + strSourceFilePath + "\" \""
+ strOutput + "copy_A\"");
bwFile.write("\r\n");
'ls' sollte ** nie ** für Endverbraucher zu anderen Zwecken als zur Anzeige * verwendet werden, nur für den menschlichen Verzehr *. Lesen Sie http://mywiki.wooledge.org/ParsingLs für eine Beschreibung von (nur einigen) Dingen, die schief gehen können, indem Sie 'ls' programmatisch verwenden. –
Ihr Programm hat auch Shell-Injection-Sicherheitsfehler, wie sie gerade geschrieben werden - wenn ein Verzeichnis einen Namen wie 'foo $ (rm -rf $ HOME) bar 'hat, erraten Sie, was passiert, wenn Sie eine Shell gegen den Puffer aufrufen, in den Sie geschrieben haben ? –