无法找到答案: 我想创建一个命令行自动的日志历史记录,而无需做任何事情。
为此我找到了一些线索,我修改了我的.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
如果你有任何关于如何做我想要的事情的其他想法
谢谢你
答案 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=