【发布时间】:2014-08-17 20:17:33
【问题描述】:
我使用 Java 编写了一个 shell 脚本 (test.sh)。这个 shell 脚本实际上是从一个文件复制到另一个文件。执行完 shell 脚本后,我从控制台打开目录并输入 ls。它显示输出文件?在扩展之后。
示例: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不应切勿用于向最终用户展示、仅供人类消费以外的任何目的。阅读 mywiki.wooledge.org/ParsingLs 以了解(只是其中一些)尝试以编程方式使用ls时可能出错的事情的描述。 -
你的程序也有当前编写的 shell 注入安全漏洞 -- 如果一个目录的名称类似于
foo$(rm -rf $HOME)bar,猜猜当你对写入的缓冲区调用 shell 时会发生什么?