

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 定义生成器或运行程序
<a name="build-run-debug-define-builder-runner"></a>

本主题说明如何定义生成器或运行程序。定义生成器或运行程序之前，请确保已[创建生成器或运行程序](build-run-debug.md#build-run-debug-create-builder-runner)。



在显示的生成器或运行程序选项卡上，使用 JSON 定义运行程序或生成器。使用以下代码开头的模板。

对于生成器，使用以下代码开头。

```
{
  "cmd": [],
  "info": "",
  "env": {},
  "selector": ""
}
```

对于运行程序，使用以下代码开头。

```
{
  "cmd": [],
  "script": "",
  "working_dir": "",
  "info": "",
  "env": {},
  "selector": "",
  "debugger": "",
  "debugport": ""
}
```

在以上代码中：
+  `cmd`：表示要作为单个命令运行的 AWS Cloud9 以逗号分隔的字符串列表。

   AWS Cloud9 运行此命令时，列表中的每个字符串将用一个空格分隔。例如， AWS Cloud9 将`$file`以 a `"cmd": [ "ls", "$file", "$args"]` s 运行`ls $file $args`， AWS Cloud9 where 将替换为当前文件的完整路径以及在`$args`文件名后输入的任何参数。有关更多信息，请参阅本节后面所支持变量的列表。
+  `script`：代表运行程序在终端执行的 bash 脚本 (也可以根据需要，将其指定为行阵列以保证可读性)。
+  `working_dir`：代表运行程序将从中运行的目录。
+  `info`：代表在开始运行时，要向用户显示的任何文本字符串。此字符串可以包含变量`Running $project_path$file_name...`，例如，其中 AWS Cloud9 将`$project_path`替换为当前文件的目录路径和`$file_name`当前文件的名称部分。请参阅本节后面所支持变量的列表。
+  `env`: 表示 AWS Cloud9 要使用的任何命令行参数数组，例如：

  ```
  "env": {
    "LANG": "en_US.UTF-8",
    "SHLVL": "1"
  }
  ```
+  `selector`: 表示您 AWS Cloud9 要用来标识适用于此运行器的文件名的任何正则表达式。例如，您可以为 Python 文件指定 `source.py`。
+  `debugger`: 表示您 AWS Cloud9 要使用的与该运行器兼容的任何可用调试器的名称。例如，您可以为 V8 调试程序指定 `v8`。
+  `debugport`：表示调试期间 AWS Cloud9 要使用的端口号。例如，您可以指定 `15454` 作为要使用的端口号。

下表给出您可以使用的变量。


****  

|  **变量**  |  **描述**  | 
| --- | --- | 
|   `$file_path`   |  当前文件的目录，例如，`/home/ec2-user/environment` 或 `/home/ubuntu/environment`。  | 
|   `$file`   |  当前文件的完整路径，例如，`/home/ec2-user/environment/hello.py` 或 `/home/ubuntu/environment/hello.py`。  | 
|   `$args`   |  在文件名之后输入的任何参数，例如，`"5" "9"`。  | 
|   `$file_name`   |  当前文件的名称部分，例如，`hello.py`。  | 
|   `$file_extension`   |  当前文件的扩展名，例如，`py`。  | 
|   `$file_base_name`   |  当前文件的名称（不带扩展名），例如，`hello`。  | 
|   `$packages`   |  程序包文件夹的完整路径。  | 
|   `$project`   |  当前项目文件夹的完整路径。  | 
|   `$project_path`   |  当前项目文件的目录，例如，`/home/ec2-user/environment/` 或 `/home/ubuntu/environment/`。  | 
|   `$project_name`   |  当前项目文件的名称（不带扩展名），例如，`my-demo-environment`。  | 
|   `$project_extension`   |  当前项目文件的扩展名。  | 
|   `$project_base_name`   |  当前项目文件的名称（不带扩展名）。  | 
|   `$hostname`   |  环境的主机名，例如，`192.0.2.0`。  | 
|   `$hostname_path`   |  环境的主机名，包含指向项目文件的相对路径，例如，`https://192.0.2.0/hello.js`。  | 
|   `$url`   |  用于访问环境的完整 URL，例如，`https://192.0.2.0.`。  | 
|   `$port`   |  分配给环境的端口，例如，`8080`。  | 
|   `$ip`   |  为环境运行进程的 IP 地址，例如，`0.0.0.0`。  | 

举例来说，名为 `G++.build` 的以下生成器文件为 GCC 定义一个生成器，它运行 **`g++`** 命令以及 `-o` 选项以将当前文件（例如 `hello.cpp`）编译到对象模块中。然后，它将对象模块链接到与当前文件使用相同名称（例如，`hello`）的程序中。以下命令具有等效作用：`g++ -o hello hello.cpp`。

```
{
  "cmd": [ "g++", "-o", "$file_base_name", "$file_name" ],
  "info": "Compiling $file_name and linking to $file_base_name...",
  "selector": "source.cpp"
}
```

再举一个例子，名为 `Python.run` 的以下运行程序文件定义一个运行程序，它使用 Python 以及提供的所有参数运行当前文件。例如，如果当前文件名为 `hello.py` 且提供了 `5` 和 `9` 参数，则等效命令是 `python hello.py 5 9`。

```
{
  "cmd": [ "python", "$file_name", "$args" ],
  "info": "Running $file_name...",
  "selector": "source.py"
}
```

最后，名为 `Print Run Variables.run` 的以下运行程序定义一个运行程序，它只是输出每个可用变量的值，然后就停止。

```
{
  "info": "file_path = $file_path, file = $file, args = $args, file_name = $file_name, file_extension = $file_extension, file_base_name = $file_base_name, packages = $packages, project = $project, project_path = $project_path, project_name = $project_name, project_extension = $project_extension, project_base_name = $project_base_name, hostname = $hostname, hostname_path = $hostname_path, url = $url, port = $port, ip = $ip"
}
```