Gitlab Tee:折叠的多行命令和无法识别的选项:追加

Gitlab Tee: collapsed multi-line command & unrecognized option: append

在我的 GitLab CI 文件中,我有一个从 "Publish npm packages instruction"

复制的文件
before_script:
  - |
    {
      echo "@${CI_PROJECT_ROOT_NAMESPACE}:registry=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/"
      echo "${CI_API_V4_URL#https?}/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}"
    } | tee --append .npmrc

当我在 Alpine 中尝试 运行 这个 Linux 我得到了。

$ { # collapsed multi-line command
tee: unrecognized option: append
BusyBox v1.31.1 () multi-call binary.
Usage: tee [-ai] [FILE]...
Copy stdin to each FILE, and also to stdout
    -a  Append to the given FILEs, don't overwrite
    -i  Ignore interrupt signals (SIGINT)

道理很简单,tee有两种实现方式,

  • Alpine 使用的 Busybox 有 tee,但不提供 --append它确实提供了一个 -a 选项(附加的缩写),定义为 “附加到给定的文件,不要覆盖”
  • GNU CoreUtils provides a copy of tee too 它有 --append 您在这里使用的。它也被定义为 “附加到给定的文件,不要覆盖”。但是作为shorthand,GNU Tee也提供了别名是-a.

所以简而言之,如果您希望某些东西与 Alpine 和 BusyBox 以及发布 GNU Tee 的发行版兼容,那么请使用 -a(两者都支持)而不是 --append(仅支持在 GNU Tee 中)。