Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash函数的不同结果_Bash_Scripting_Shell - Fatal编程技术网

bash函数的不同结果

bash函数的不同结果,bash,scripting,shell,Bash,Scripting,Shell,我试图编写一个脚本来记录服务器上执行的所有命令,目前我有两个版本: (脚本的简化版本) 第1版: function fc { fc -ln -0 } trap fc DEBUG 第2版: function fc { cmd=`fc -ln -0` echo $cmd } trap fc DEBUG 脚本包含在/etc/bash.bashrc:sourcescript.sh 问题是,当我运行此脚本时,不会得到相同的结果: 当我运行第一个verion时,我得到了触发陷阱的命令: SERV

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

(脚本的简化版本)

第1版:

function fc
{
  fc -ln -0
}
trap fc DEBUG
第2版:

function fc
{
 cmd=`fc -ln -0`
 echo $cmd
}
trap fc DEBUG
脚本包含在/etc/bash.bashrc:
sourcescript.sh

问题是,当我运行此脚本时,不会得到相同的结果:

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

SERVER#
SERVER#
SERVER# test
SERVER# ls
ls
但当我运行第二个命令时,我得到了last-1命令:

SERVER#
SERVER#
SERVER# test
SERVER# ls
test

提前感谢。

如果您使用的是用于
陷阱调试的函数
,则可以使用特殊的BASH变量
BASH\u命令

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

trap 'dbg' DEBUG

确保此
trap
命令是
~/.bashrc
中的最后一行(或~/.bash_配置文件中的最后一行,如果存在)。

在第二个版本中,您在不同的进程中执行
fc
,因此您不会有相同的历史记录。@Glenjackman谢谢,我已经试着直接在bash cmd=
fc-ln-0中运行它;echo$cmd和cmd=
fc-ln-0`,我得到了相同的结果。如果我将trap debug放入/etc/bashrc中,是否会影响一般系统性能?不太可能,我甚至一起使用了
trap debug
PROMPT\u命令。好的。当我连接到服务器时,我看到来自其他脚本(~/.bashrc,…)的一些命令,这表明有一种方法可以忽略这些脚本。谢谢您是否只想将每个执行的命令存储在一个文件中?