终端不接受目录的完整输入

终端不接受目录的完整输入

我正在尝试了解 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

就我而言,它运行正常,没有任何问题。

相关内容