我试图了解 Sublime Text 3 构建系统的功能。进入 shell_cmd 的命令将直接进入终端,但终端显示“不存在此类文件或目录”。这是我制作的构建系统。
{
"shell_cmd": "gnome-terminal -- bash -c '${file_path}/${file_base_name}; read -sn 1'",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++, source.cxx, source.cpp",
"variants":
[
{
"name": "Run",
"shell": true,
"shell_cmd": "gnome-terminal -- bash -c '${file_path}/${file_base_name}; read -sn 1'"
}
]
}
实际文件路径是:'/home/dr_insult/COMPUTER PROGRAMS/DATA STRUCTURES & ALGORITHMS/Stacks & Queues/'。我知道这是因为单词之间有空格引起的,但是不应该由构建系统中的 '' 引号纠正吗?
您的问题是您需要用引号封装您的路径。看起来你已经是了,但我猜你对“字符串中的字符串”的数量感到困惑。
从您的 JSON 开始,您将
shell_cmd
密钥的值传递给您的程序,即:该命令正在启动
gnome-terminal
应用程序并要求它在启动时运行以下命令:反过来,该命令正在执行
bash
并告诉它运行以下命令 -记下不存在的引号:在运行之前,该命令将在执行之前将变量替换为适当的值,并且根据您显示的错误消息,该命令变为以下内容:
最后,在这种情况下,正在发生的事情是 bash 通过将其拆分为
&
字符来解析该命令,因为它认为它应该在后台运行多个命令,如下所示:所有这些路径都不存在于您的系统中,这会引发您看到的那些错误。
您需要做的是引用您的该命令,以告诉 bash 将所有该字符串视为单个路径。
因此,将
shell_cmd
键的值更改为以下值(您需要转义双引号,以便您的 JSON 保持有效)尝试使用脚本进行测试:
侏儒终端
直接测试:
使用以下新实例对其进行测试
gnome-terminal
:就我而言,它可以正常工作。