创建日志历史记录,不包括bash MacOSX中的某些命令

时间:2018-03-07 18:04:03

标签: bash command-line macos-sierra

无法找到答案: 我想创建一个命令行自动的日志历史记录,而无需做任何事情。

为此我找到了一些线索,我修改了我的.bash_profile 但我需要在我的日志中排除一些我不想要的命令,如“ls,cd等” 这不起作用,我不能

所以这是我的代码:

# log every command typed and when
command_out=( "more" "less" "cd" "open" "ls" "pwd" "nano" "man" "help") #array of command i don't want to save in my log

my_TEST=0 ##setup a var
FIRST_COMMAND=$(echo $BASH_COMMAND| cut -d' ' -f 1) ##get only the first command 

## test if the first command is in the array
for elm in "${command_out[@]}"; do 
    if [[ $FIRST_COMMAND == $elm ]]; then
echo $elm # does not work
        $my_TEST=1 ## if the command is in the array the var is setup to 1
    fi
done


if [[ $my_TEST == 0 ]] && [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

如果你有任何关于如何做我想要的事情的其他想法

谢谢你

3 个答案:

答案 0 :(得分:2)

Bash会自动保存您键入的每个命令的历史记录;您可以使用history命令查看它。如果你想要排除某些命令,而不是试图从日志中排除它们,我会在查看它时跳过它们,例如history | egrep -vw 'ls|cd|other|commands|here'

你可以设置HISTTIMEFORMAT来获取每个条目的时间戳,控制HISTFILESIZE保存的命令数量,如果你真的想要保留一些命令,而不是在你没有看到它们时看,你可以在HISTIGNORE中列出它们。请参阅https://www.gnu.org/software/bash/manual/html_node/Using-History-Interactively.html

答案 1 :(得分:0)

您的~/.bash_history文件应该已包含完整的命令历史记录。你可以用类似的东西 cat ~/.bash_history | grep -v cd | egrep -v 'cd|ls|...' 过滤掉你不感兴趣的命令。

因此,对于您指定的列表: cat ~/.bash_history | egrep -v 'more|less|cd|open|ls|pwd|nano|man|help'

答案 2 :(得分:0)

我用我真正想要的东西完成了Mark Reed的回答。这是我的代码:

# changes the .bash_history file mode to append
shopt -s histappend

#configures the history -a command to be run at each shell prompt. The -a immediately writes the current/new lines to the history file.
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

#list of command i don't want in my history
HISTIGNORE='ls*:exit:pwd:clear:cd*:man*:more*:less*:head*:tail*:nano*:open*:help*'

#set no limit to the history file size
HISTSIZE= HISTFILESIZE=