gpt4 book ai didi

java - 编码一个字符串以用作 shell 参数

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

我需要在 linux shell 命令中使用文件名作为参数。问题是,java 给了我那个名字,保存了所有的空格和其他字符,因此 shell 提示。有没有一种方法可以在将字符串传递给 shell 之前转义所有这些有问题的字符?

最佳答案

有同样的问题,单引号是不够的(正如罗伯特已经指出的那样)

解决方法:

import com.google.common.escape.Escaper;
import com.google.common.escape.Escapers;

public class YourFancyClass {
public static final Escaper SHELL_ESCAPE;
static {
final Escapers.Builder builder = Escapers.builder();
builder.addEscape('\'', "'\"'\"'");
SHELL_ESCAPE = builder.build();
}
}

为什么要进行如此复杂的替换? That's why.

用例:

System.out.format("ln -f '%s' '%s'%n", 
SHELL_ESCAPE.escape(anyOrig.toString()),
SHELL_ESCAPE.escape(duplicate.toString()));

按预期工作:

ln -f '/home/user/Musik/mix-2012-13/aesthesys~ I Am Free, That Is Why I'"'"'m Lost..mp3' '/home/user/Musik/youtube converted/aesthesys~ I Am Free, That Is Why I'"'"'m Lost..mp3'

关于java - 编码一个字符串以用作 shell 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187242/

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