我有一个脚本,我正在为其使用set -x
在执行时打印命令的跟踪。
打印一个简单命令,
for
命令,case
命令,select
命令和算术for
命令及其参数或 关联的单词列表被扩展和之前 执行。PS4
变量的值扩展了,结果 值是在命令及其扩展参数之前打印的。
有没有办法获得这种行为,但是不是打印变量扩展?我正在捕获日志输出并将其发送到集中式记录器,但是我不希望输出某些敏感变量的值。
您可以使用$ bash_command使用陷阱调试
#!/bin/bash
set -T
trap 'echo "$PS4$BASH_COMMAND"' DEBUG
i=1234
echo "$i"
(echo $i)
这将打印
+ i=1234
+ echo "$i"
1234
+ echo $i
1234
bash_command
除非shell是陷阱的结果,否则当前正在执行或即将执行的命令,除非在陷阱时执行命令,否则是在陷阱时执行的命令。-t
如果设置,调试和返回上的任何陷阱都由Shell功能,命令替换和在子壳环境中执行的命令继承。在这种情况下,调试和返回陷阱通常不会继承。陷阱
如果SIGSPEC是调试的,则在每个简单命令之前执行命令ARG,for命令,case命令,选择命令,每个命令的每个算法,以及第一个命令在shell函数中执行