【问题标题】:Sublimetext 3 : Unable to get exit code in external cmdSublime Text 3:无法在外部 cmd 中获取退出代码
【发布时间】:2019-06-26 00:35:38
【问题描述】:

我在 Windows 10 上使用 GCC 从 sublimetext 3 运行 C 代码,我希望外部 cmd 在运行 exe 后显示退出代码。

这是我的 sublime-build 文件:

{
 "shell_cmd" : "gcc -Wall -pedantic $file_name -o ${file_base_name}",
 "working_dir" : "$file_path",
 "variants":
  [
   {
     "name": "Run",
     "shell_cmd": "gcc -Wall -pedantic $file_name -o ${file_base_name} && start cmd /k ${file_path}/${file_base_name}  "
   }
  ]
}

我尝试过这样的事情:

"shell_cmd": "gcc -Wall -pedantic $file_name -o ${file_base_name} && start cmd /k ${file_path}/${file_base_name} & echo %errorlevel%  "

这个问题是退出代码出现在 sublimetext shell 中,总是显示0。我猜是外部 cmd 退出代码。

我想在新的 cmd 中执行 echo %errorlevel% 部分并显示我的 exe 的退出代码,但我不知道该怎么做。

编辑: 这是截图:

running hello world

我的 main.exe 在新的 cmd 中运行,并且回显在 sublimetext 自己的控制台中完成。

我想这些问题可以更好地总结:
1- 如何编写此脚本以便 cmd 可以执行第二个命令?
2-如何打开它,运行我的 .exe,然后才显示退出代码?

编辑 2:

Here is a new screenshot.

在这里,您可以看到我的代码以及 sublimetext 的内部 cmd 使用我的 sublime-build 文件中的命令调用的外部 cmd。
我在这个外部 cmd 中手动输入了 echo %errorlevel%
我试图实现的目标是修改我的 sublime-build 文件中的命令,该文件将从 sublimetext 的内部 cmd 执行,这样外部 cmd 调用运行我的代码,然后才评估echo %errorlevel%,所有这个自动的。

【问题讨论】:

  • 尝试使用call echo %^ErrorLevel%,或者使用cmd /V /Cecho !ErrorLevel!。也可以尝试删除start,或者改用start "" /WAIT
  • 你试过我的答案了吗?
  • 我试过这些,我不能在行中添加双引号,其他建议也没有帮助。我想这里真正的问题是: 1-我如何编写这个脚本以便 cmd 可以执行第二个命令? 2- 如何打开它,运行我的 .exe,然后才显示退出代码?
  • @randomLainist "shell_cmd": "gcc -Wall -pedantic $file_name -o ${file_base_name} && cmd /v /k "${file_path}/${file_base_name} & echo !errorlevel!""

标签: cmd sublimetext3 exit-code


【解决方案1】:

您需要使用delayed expansion 来实现此目的。 errorlevel 在您运行命令之前设置,它希望在同一行中进行更改。使用cmd /v为cmd启用:

"shell_cmd": "gcc -Wall -pedantic $file_name -o ${file_base_name} && start cmd /v /k ${file_path}/${file_base_name} & echo !errorlevel!  "

【讨论】:

  • 使用此代码 echo !errorleve! 在 sublimetext 的控制台中进行评估并显示 !errorlevel!
  • "shell_cmd" 是这个命令的目标,它基本上是 cmd。问题是 sublimetext 不支持输入,所以我需要将我的 exe 运行到外部 cmd 中。因此&& start cmd。问题是我不知道如何将两个命令传输到这个新的 cmd。
【解决方案2】:

经过一番额外的谷歌搜索后,我找到了解决方案。

我需要使用 ^& 转义 &

这是我的新 sublime-build 命令:

"shell_cmd": "gcc -Wall -pedantic $file_name -o ${file_base_name} && start cmd /V /k ${file_path}/${file_base_name} ^& echo: ^& echo: ^& echo: ^& echo program ended code : !errorlevel! "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2018-04-02
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多