bash 函数的不同结果

Different result from a bash function

我正在尝试编写一个脚本来记录在服务器上执行的所有命令,目前我有 2 个版本:

(脚本的简化版)

版本 1:

function fc
{
  fc -ln -0
}
trap fc DEBUG

版本 2:

function fc
{
 cmd=`fc -ln -0`
 echo $cmd
}
trap fc DEBUG

脚本包含在 /etc/bash.bashrc 中:source script.sh

问题是当我运行这个脚本时,我没有得到相同的结果:

当我运行第一个版本时,我得到了触发陷阱的命令:

SERVER#
SERVER#
SERVER# test
SERVER# ls
ls

但是当我运行第二个命令时,我得到了 last-1 命令:

SERVER#
SERVER#
SERVER# test
SERVER# ls
test

提前致谢。

如果您正在为 trap DEBUG 使用函数,那么您可以使用特殊的 BASH 变量 BASH_COMMAND.

dbg() { echo "$BASH_COMMAND" >> ~/cmd.log }

trap 'dbg' DEBUG

确保此 trap 命令是 ~/.bashrc 中的最后一行(或 ~/.bash_profile 中的最后一行,如果存在的话)。