【问题标题】:How can you hide env variables when executing a bash script with -xe?使用 -xe 执行 bash 脚本时如何隐藏环境变量?
【发布时间】: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


【解决方案1】:

POSIX 标准中没有任何内容允许这样做。你所能做的就是:

set +o xtrace       # Switch xtrace off
some hidden code
set -o xtrace       # Switch xtrace back on

或者,使用verbose 跟踪而不是xtrace,这是-v 选项。

/bin/sh -ve script.sh

顺便说一句,如果您使用/bin/sh 执行,那么它不是bash 脚​​本,而是sh 脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 2015-09-28
    • 2020-10-30
    • 2011-03-05
    • 2017-10-26
    • 1970-01-01
    • 2017-12-25
    • 2011-07-23
    相关资源
    最近更新 更多