在没有变量扩展的情况下在bash中打印一系列命令

时间:2016-06-16 06:52:13

标签: bash

我有一个脚本,我使用set -x在执行命令时打印这些命令的痕迹。

  

打印一系列简单命令,for命令,case命令,select   命令和算术for命令及其参数或   关联的单词列表在扩展之后和它们之前   执行。 PS4变量的值被扩展并得到结果   在命令及其扩展参数之前打印值。

有没有办法让这种行为,但打印变量扩展?我正在捕获日志输出并将其发送到集中式记录器,但我不希望输出某些敏感变量的值。

1 个答案:

答案 0 :(得分:8)

您可以像使用$ BASH_COMMAND一样使用陷阱DEBUG

#!/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
  如果设置,则DEBUG和RETURN上的任何陷阱都由shell函数,命令替换和子shell环境中执行的命令继承。在这种情况下,DEBUG和RETURN陷阱通常不会被继承。

     

<强>阱
  如果sigspec是DEBUG,则命令arg在每个简单命令之前执行,用于命令,case命令,select命令,命令的每个算术,以及在shell函数中执行第一个命令之前

相关问题