【发布时间】:2017-04-13 09:00:22
【问题描述】:
我有一个使用 /bin/sh -xe script.sh 执行的 bash 脚本,我需要捕获它的输出。
问题是在脚本中我使用了一些 ENV 变量,我希望它们不会显示在输出中。 有没有办法做到这一点?
即。如果我的脚本有 touch $MY_ENV_VAR 和 MY_ENV_VAR=ok,则 /bin/sh -xe script.sh 的输出将是 touch ok。
有什么方法可以防止 env vars 在-x 的输出中被替换?所以我只会回复+ touch $MY_ENV_VAR。
【问题讨论】:
-
POSIX 标准中没有任何内容允许这样做。你所能做的就是
set +o xtrace然后set -o xtrace围绕你不想显示的代码。或者,使用verbose跟踪而不是xtrace,这是-v选项。顺便说一句,如果您使用/bin/sh执行,那么它不是 bash 脚本,而是sh脚本。 -
尝试使用
sh -vex- 您将在输出中看到如何读取脚本文件的另一行 (-v)。难以阅读,但有时可能很有用。 -
谢谢。使用
set -ve而不是set -xe似乎可以解决问题。您可以将此作为答案发布,以便我接受吗? -
@daniels:你为什么还需要它?
-
我正在尝试做一些类似于 CI 工具的事情。 docs.gitlab.com/ee/ci/pipelines.html 所以用户在 yaml 文件中定义了一些命令,我在 docker 中执行它们并显示输出。敏感数据(如令牌等)将在 ENV 变量中,以便他们可以使用它,但它不应出现在日志中。
标签: bash environment-variables