在使用-xe执行bash脚本时,如何隐藏env变量?
我有一个用在使用-xe执行bash脚本时,如何隐藏env变量?,bash,environment-variables,Bash,Environment Variables,我有一个用/bin/sh-xe script.sh执行的bash脚本,我需要捕获它的输出 问题是,在脚本中我使用了一些ENV变量,我希望这些变量不会显示在输出中。 有没有办法做到这一点 也就是说,如果我的脚本有touch$my_ENV_VAR和my_ENV_VAR=ok,那么/bin/sh-xe script.sh的输出将是touch ok 有没有办法防止在-x的输出中替换环境变量?因此,我只需返回+touch$MY_ENV_VAR。POSIX标准中没有允许这样做的内容。你所能做的就是: set
/bin/sh-xe script.sh执行的bash脚本,我需要捕获它的输出
问题是,在脚本中我使用了一些ENV变量,我希望这些变量不会显示在输出中。
有没有办法做到这一点
也就是说,如果我的脚本有touch$my_ENV_VAR
和my_ENV_VAR=ok,那么/bin/sh-xe script.sh
的输出将是touch ok
有没有办法防止在-x
的输出中替换环境变量?因此,我只需返回+touch$MY_ENV_VAR
。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
脚本。POSIX标准中没有允许这一点。您所能做的就是设置+o xtrace
然后设置-o xtrace
围绕您不希望显示的代码。或者,使用verbose
跟踪而不是xtrace
,这是-v
选项。顺便说一句,如果您使用/bin/sh
执行,那么它不是bash脚本,而是sh
脚本。尝试使用sh-vex
-您将在输出上看到另一行如何读取脚本文件(-v
)。很难阅读,但有时可能有用。谢谢。使用set-ve
而不是set-xe
似乎可以达到目的。你能把这个作为一个答案贴出来让我接受吗?@daniels:你为什么还需要它?我正在尝试做一些类似CI工具的事情。因此,用户在yaml文件中定义一些命令,我在docker中执行这些命令,并向他们显示输出。敏感数据(如令牌等)将位于ENV变量中,因此他们可以使用它,但它不应出现在日志中。