我想在 Sublime Text 3 中使用自定义构建命令来构建 C 源代码。我使用以下代码作为 sublime-build :
{
"cmd" : ["gcc $file_name -o ${file_base_name} && konsole -e ''bash -c \"./${file_base_name}; echo 'Process returned $?'; read -p 'Press [ENTER] to exit.'\"''"],
"selector" : "source.c",
"shell": true,
"working_dir" : "$file_path"
}
这里,由于尝试访问,该部分echo 'Process returned $?';
导致了严重问题(即构建根本无法运行!)$?
。
$?
这里应使用什么替代方法(或正确的语法) ?
答案1
棘手的一点是正确地转义$
in$?
和所有嵌套的引号。当你有如此深的嵌套时,这真是一场噩梦:
cmd
定义为"..."
- 其中有
konsole -e '...'
- 其中有
bash -c "..."
- 其中
echo '...'
有read '...'
除此之外,您还需要考虑 Sublime 的转义规则,这使得正确编写这段代码成为一场真正的噩梦,并且不可能以可读的方式编写。
我不建议尝试修复这个问题,而是建议将复杂的命令提取到以$file_name
和$file_base_name
为参数的脚本中,如下所示:
"cmd" : ["/path/to/build.sh '$file_name' '$file_base_name'"],
然后,你可以/path/to/build.sh
像编写任何 shell 脚本一样进行编写,不受 Sublime 的解析规则的限制,并且易于独立测试。
答案2
bash 中的 $? 显示上一个命令的退出状态。
$? 是正确的语法。
在回显中,如果您使用两个“$?”,则不会执行,它只会回显“$?”而不是退出状态,您需要改用“”。
该行echo 'Process returned $?';
不会造成严重问题,因为它只会回显 '' 和 ; 之间的内容,只是终止了“行”
你的写作也不是很连贯。这不正是你想要达到的效果吗?
"cmd" : ["gcc {$file_name} -o ${file_base_name} && konsole -e 'bash -c \"./${file_base_name}';echo \"Process returned $?\";read -p 'Press [ENTER] to exit.'"],
我不太明白你
'\"''"
最后想达到什么目的