Sublime Text构建系统JSON嵌套shell命令转义问题
问题:Sublime Text构建系统嵌套引号转义失败的解决办法
我为Sublime Text编写的构建系统JSON代码原本运行正常:
"shell_cmd": "osascript -e 'tell application \"Terminal\" to do script \"ssh root@1.2.3.4 \"'"
现在需要给ssh命令添加-t 'ls -la; bash -l'参数,尝试用\'转义单引号后,Sublime Text不接受:
"shell_cmd": "osascript -e 'tell application \"Terminal\" to do script \"ssh root@1.2.3.4 \'ls -la; bash -l\'\"'"
互换双引号和单引号的方式也无法正常运行,但以下命令在终端中可以正常执行:
osascript -e 'tell application "Terminal" to do script " ssh root@1.2.3.4 -t \"ls -la; bash -l\" " '
解决办法
Sublime构建系统的JSON配置中,字符串需要遵循JSON的转义规则。终端中能运行的命令里的\",在JSON的shell_cmd中需要再转义一次,也就是写成\\\"。
正确的配置代码如下:
"shell_cmd": "osascript -e 'tell application \"Terminal\" to do script \"ssh root@1.2.3.4 -t \\\"ls -la; bash -l\\\"\"'"
原理:JSON会先解析\\\"为\",传递给shell后就和终端中正常运行的命令格式一致,完美解决嵌套引号的转义冲突问题。
内容的提问来源于stack exchange,提问作者LA_
相关产品推荐
相关产品推荐

