如何解决如何总是逃避用户的输入?
我有代码可以“即时”创建 tcsh 脚本。代码(如果重要的话用 Java 编写)获取一个配置文件,解析它,然后从中创建一个 tcsh 脚本。在配置文件中,输出tcsh脚本中有一个字符串有两个作用:
- 打印命令(带有
echo
,意思是echo <string>
) - 执行命令(意思是
<string>
)。
代码:
# Java code but it really does not matter
fw.write("echo '" + cmd + "'\n");
fw.write(cmd + "\n");
cmd
有问题。为了解释问题,请考虑以下 cmd:
/run/some/setup -o1 option1 -option2 '$SOME_ENV_2_EXEC -option3 hi'
# You get:
# echo /run/some/setup -o1 option1 -option2 '$SOME_ENV_2_EXEC -option3 hi'
# /run/some/setup -o1 option1 -option2 '$SOME_ENV_2_EXEC -option3 hi'
如果 cmd
包含 '
,那么它将把它分成三部分(第一部分是 '/run/some/setup -o1 option1 -option2 '
,第二部分是 $SOME_ENV_2_EXEC -option3 hi
,第三部分是 {{1} }. 我也不能使用 ''
,因为如果用户在字符串中使用 "
我会得到同样的错误。我也不想不带引号使用,因为我不想评估输入。例如,如果我们有 "
,我不希望它评估 /run/some/setup -o1 $SOME_ENV_2_EXEC
,我希望它打印 env 名称(您可以使用 $SOME_ENV_2_EXEC
获得此效果:{ {1}} 但正如我们所见,如果字符串本身包含 '
,我们会遇到问题。我怎样才能让它始终工作?
底线,我希望它适用于:
echo '/run/some/setup -o1 $SOME_ENV_2_EXEC'
我可以在这里使用哪种解决方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。