如何确保在调试模式下运行脚本时不会显示环境变量

如何确保在调试模式下运行脚本时不会显示环境变量
[yesh]$ env | grep password
password=hello

-> tsts 是我的脚本,它使用环境变量密码。

[yesh]$ grep password tsts

export DB_PWD="$password"

-> 这是我在调试模式下运行的脚本

[yesh]$ sh -x tsts

+ export DB_DD=yesh
+ DB_DD=yesh
+ export DB_USER=user
+ DB_USER=user
+ export DB_PWD=hello
+ DB_PWD=hello
+ echo 'sqlplus '\''user/hello@yesh'\'''

sqlplus 'user/hello@yesh'

我该怎么做才能在调试模式下运行脚本时不显示密码?

答案1

您需要检查并记住当前的调试设置,即-x脚本运行时该选项是否有效。然后,您需要用括号括住您不想打印的每个语句,以set +x 关闭该选项,并set -x在最初设置时将其重新打开。变量$-包含脚本运行时有效的选项。

#!/usr/bin/env bash

export DB_DD=yesh
export DB_USER=user

# check and remember current setting of "-x":
if echo $- | grep -q x; then 
    is_debug=1
else
    is_debug=0
fi

[ $is_debug -eq 1 ] && set +x   # temporarily disable "-x"
export DB_PWD=hello             # won't be printed
[ $is_debug -eq 1 ] && set -x   # again enable "-x"

echo 'sqlplus '\''user/hello@yesh'\'''
exit 0;

输出sh -x tsts

+ export DB_DD=yesh
+ export DB_USER=user
+ echo x
+ grep -q x
+ is_debug=1
+ [ 1 -eq 1 ]
+ set +x
+ echo sqlplus 'user/hello@yesh'
sqlplus 'user/hello@yesh'
+ exit 0

但请记住这毫无意义因为每个可以运行你的脚本的人都可以查看它并看到其中的密码。

相关内容