Pro*_*ity 4 gnome command-line bash gnome-terminal sublime-text
我试图了解 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'"
}
]
}
Run Code Online (Sandbox Code Playgroud)
实际的文件路径是:'/home/dr_insult/COMPUTER PROGRAMS/DATA STRUCTURES & AGORITHMS/Stacks & Queues/'。我知道这是因为单词之间有空格引起的,但是构建系统中的 '' 引号不应该更正吗?
你的问题是你需要用引号封装你的路径。看起来你已经是了,但我猜你对你拥有的“字符串中的字符串”的数量感到困惑。
从您的 JSON 开始,您将shell_cmd
密钥的值传递给您的程序,即:
gnome-terminal -- bash -c '${file_path}/${file_base_name}; read -sn 1'
Run Code Online (Sandbox Code Playgroud)
该命令正在启动gnome-terminal
应用程序并要求它在启动时运行以下命令:
bash -c '${file_path}/${file_base_name}; read -sn 1'
Run Code Online (Sandbox Code Playgroud)
反过来,该命令正在执行bash
并告诉它运行以下命令 -请注意不存在的引号:
${file_path}/${file_base_name}; read -sn 1
Run Code Online (Sandbox Code Playgroud)
在运行之前,该命令将在执行之前将变量替换为其适当的值,并且根据您显示的错误消息,该命令将变为以下内容:
/home/dr_insult/COMPUTER PROGRAMS/DATA STRUCTURES & ALGORITHMS/Stacks & Queues/; read -sn 1
Run Code Online (Sandbox Code Playgroud)
最后,在这种情况下,发生的事情是 bash 通过在&
字符上拆分命令来解析该命令,因为它认为它应该在后台运行多个命令,如下所示:
# This first command, for example, is attempting to run a script named
# /home/dr_insult/COMPUTER while passing two parameters
# "PROGRAMS/DATA" and "STRUCTURES" and attempting to put it in the background
/home/dr_insult/COMPUTER PROGRAMS/DATA STRUCTURES &
ALGORITHMS/Stacks &
Queues/
read -sn 1
Run Code Online (Sandbox Code Playgroud)
所有这些路径都不存在于您的系统中,这会引发您看到的那些错误。
您需要做的是引用您的那个命令,以便告诉 bash 将所有该字符串视为单个路径。
因此,将shell_cmd
键的值更改为以下内容(您需要对双引号进行转义,以便您的 JSON 保持有效)
"gnome-terminal -- bash -c '\"${file_path}/${file_base_name}\"; read -sn 1'"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
289 次 |
最近记录: |