在使用-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变量中,因此他们可以使用它,但它不应出现在日志中。