如何在 Sublime-build“cmd”中获取前一个命令的状态代码?

如何在 Sublime-build“cmd”中获取前一个命令的状态代码?

我想在 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.'"],

我不太明白你 '\"''"最后想达到什么目的

相关内容