Skip to content

常见问题解答

本页面包含有关 Task 的常见问题列表。

<功能>何时发布?/ 预计完成时间

Task 是一个由一小群全职工作且拥有项目外生活的志愿者维护的免费开源项目。因此,很难提前预测我们能为项目投入多少时间,也不想做出无法兑现的承诺。基于这个原因,我们无法为新功能或版本发布提供预计完成时间。我们会尽最大努力定期发布版本并及时修复错误,但有时个人生活必须优先考虑。

预计完成时间可能是我们(以及其他开源项目的维护者)被问到最多的问题。我们理解您对项目的热情,但频繁被问及这个问题会让人不堪重负。请保持耐心,避免询问预计完成时间。

加速进程的最佳方式是亲自为项目做贡献。我们始终感谢新的贡献者。如果您有兴趣参与贡献,请查看贡献指南

为什么我的任务无法更新 Shell 环境?

这是 Shell 工作方式的限制。Task 作为当前 Shell 的子进程运行,因此无法更改启动它的 Shell 的环境。其他任务运行器和构建工具也存在此限制。

常见的解决方法是创建一个任务,生成可由 Shell 解析的输出。例如,要在 Shell 中设置环境变量,可以编写如下任务:

yaml
my-shell-env:
  cmds:
    - echo "export FOO=foo"
    - echo "export BAR=bar"

现在运行 eval $(task my-shell-env),变量 $FOO$BAR 将在您的 Shell 中可用。

我无法在任务命令中重用 Shell

Task 将每个命令作为独立的 Shell 进程运行,因此在一个命令中执行的操作不会影响后续命令。例如,以下操作无效:

yaml
version: '3'

tasks:
  foo:
    cmds:
      - a=foo
      - echo $a
      # 输出 ""

要解决此问题,可以使用多行命令:

yaml
version: '3'

tasks:
  foo:
    cmds:
      - |
        a=foo
        echo $a
      # 输出 "foo"

或者对于更复杂的多行命令,建议将代码移至单独的文件中并调用该文件:

yaml
version: '3'

tasks:
  foo:
    cmds:
      - ./foo-printer.bash
shell
#!/bin/bash
a=foo
echo $a

Windows 上是否提供 Shell 核心实用程序?

是的,提供了最常见的实用程序。未来可能会添加更多。 这是因为 Task 用 Go 编译了一小部分核心实用程序,并在 Windows 上默认启用这些实用程序以提供更好的兼容性。

可以通过 TASK_CORE_UTILS 环境变量控制是否使用这些内置核心实用程序:

bash
# 启用,即使在非 Windows 平台
env TASK_CORE_UTILS=1 task ...

# 禁用,即使在 Windows
env TASK_CORE_UTILS=0 task ...

以下是当前可用的核心实用程序列表:

  • base64
  • cat
  • chmod
  • cp
  • find
  • gzip
  • ls
  • mkdir
  • mktemp
  • mv
  • rm
  • shasum
  • tar
  • touch
  • xargs
  • (未来可能会添加更多)