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 中的最后一行,如果存在的话)。
我正在尝试编写一个脚本来记录在服务器上执行的所有命令,目前我有 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 中的最后一行,如果存在的话)。