我正在尝试了解 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/'。我知道这是因为单词之间有空格,但难道不应该通过构建系统中的“”引号来纠正吗?
答案1
您的问题是您需要用引号括住路径。看起来您已经这样做了,但我猜您对“字符串中的字符串”的数量感到困惑。
从 JSON 开始,您将shell_cmd
键的值传递给程序,该值是:
gnome-terminal -- bash -c '${file_path}/${file_base_name}; read -sn 1'
该命令正在启动gnome-terminal
应用程序并要求其在启动时运行以下命令:
bash -c '${file_path}/${file_base_name}; read -sn 1'
该命令依次执行bash
并告诉它运行以下命令 -注意不存在的引号:
${file_path}/${file_base_name}; read -sn 1
在运行之前,该命令会在执行之前将变量替换为其适当的值,并且根据您显示的错误信息,该命令变成以下内容:
/home/dr_insult/COMPUTER PROGRAMS/DATA STRUCTURES & ALGORITHMS/Stacks & Queues/; read -sn 1
最后,在这种情况下发生的情况是,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
所有这些路径都不存在于您的系统中,因此会引发您看到的那些错误。
您需要做的是引用该命令,以便告诉 bash 将所有字符串视为单一路径。
因此将键的值更改shell_cmd
为以下内容(您需要转义双引号以使 JSON 保持有效)
"gnome-terminal -- bash -c '\"${file_path}/${file_base_name}\"; read -sn 1'"
答案2
尝试使用脚本进行测试:
file_path='/home/spacer/test/computer programs/data structures & algorithms/stacks & queues/'
file_base_name=file.txt
echo $file_path$file_base_name
echo $file_path$file_base_name > /home/user/test/testpath.txt
gnome 终端
直接测试一下:
$ ./testpath.sh
/home/user/test/computer programs/data structures & algorithms/stacks & queues/file.txt
使用新的实例进行测试gnome-terminal
:
$ gnome-terminal -e /home/user/test/testpath.sh
$ cat /home/user/test/testpath.txt
/home/user/test/computer programs/data structures & algorithms/stacks & queues/file.txt
就我而言,它运行正常,没有任何问题。