gpt4 book ai didi

bash - Unix: “ls” 命令显示带有 ?延期后

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:44 26 4
gpt4 key购买 nike

我使用 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");

最佳答案

我的猜测:

您的 Java 程序使用 \r\n(回车符 + 换行符)来终止每一行。但是,Unix 系统使用换行符 \n 作为换行符。虽然 终端 可以理解回车符,但它对其他程序没有任何意义——就 /bin/sh 解释器而言,它只是一个像其他任何字符一样的字符担心的。这意味着 \r 成为脚本运行的每个命令的最后一个参数的一部分:

cd myoutput\r
mkdir myoutput\r
cd something/lib/something\r
echo Cut Src Start time %time%\r
cp "sourcefile" "myoutputcopy_A"\r

所以最后一个命令总是创建名称末尾有回车符的文件,ls 将它们显示为问号,就像所有其他“不可打印”字符一样。您可以使用 ls -bls -Q 来查看。

要解决此问题,请在生成 Unix shell 脚本时仅使用 \n。 (或者,更好的是,不要生成 shell 脚本,而是编写在需要时接受参数的脚本。您也可以在 Java 程序本身中做很多事情。)

关于bash - Unix: “ls” 命令显示带有 ?延期后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com