使用时间戳回显每个 shell 脚本命令

war*_*iuc 5 shell bash shell-scripting

set -xset -v打印每个执行的命令。

如何在命令开始执行时打印命令?

小智 9

在 Bash 中,您可以使用PS4- 来set -x为跟踪输出添加前缀。

PS4='+ $(date "+%s.%N")\011 '
set -x
...
Run Code Online (Sandbox Code Playgroud)

\011 是水平制表符


小智 7

在 Bash 中,可以使用“trap”内置命令和“DEBUG”级别来实现每个命令后执行代码。

在 bash 中执行:help trap 或参考 bash 手册页,并查找 trap 部分

例子:

trap 'date' DEBUG
Run Code Online (Sandbox Code Playgroud)

这将在每个命令之后执行命令“date”。

当然,您可以根据需要格式化时间戳,请参阅“日期”手册页。

如果你想删除换行符,以便时间戳出现在下一个命令的前面,你可以这样做:

trap 'echo -n $(date)' DEBUG
Run Code Online (Sandbox Code Playgroud)

并终止此操作:

trap '' DEBUG
Run Code Online (Sandbox Code Playgroud)

您可以与“set -x”/“set +x”组合