我们使用下面的方法来保存命令历史记录,在我们发出命令
su username
并运行命令之前,它工作正常。运行 su username
后,不会保存命令历史记录,直到我们退出 su
# cat /etc/.bashrc
[ -d "$HOME/.History_Save" ] || mkdir "$HOME/.History_Save"
TERMINAL=`who am i | nawk '{print $NF}' | tr -d '()'`
HISTFILE="$HOME/.History_Save/.history_$TERMINAL"
HISTTIMEFORMAT="$TERMINAL %d/%m/%y %T "
HISTFILESIZE=1000
shopt -s histappend
PROMPT_COMMAND="history -a"
我不确定哪里做错了,因为它无法保存
su username
之后运行的命令历史记录
我正在使用
蒂亚
历史文件仅存储当前用户的命令。
文件仅在退出时更新。
对于那些可能对假设的用户与发出
su
的用户感到困惑的人,请注意,即使 who
在以 jenkins
身份登录时识别出我,每个人仍然保留其 ~/.bash_history
(或指定的备用文件,如上所述)分开。
$: sudo su - jenkins
Last login: Tue May 7 14:44:51 GMT 2024 on pts/0
$: whoami --help | head -2
Usage: whoami [OPTION]...
Print the user name associated with the current effective user ID.
$: who --help | head -2
Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]
Print information about users who are currently logged in.
$: whoami
jenkins
$: who am i # id & ip edited/redacted
paul pts/0 2024-05-09 13:14 (10.1.2.3)
$: history 5 # kept in memory at this point
1006 whoami --help | head -2
1007 who --help | head -2
1008 whoami
1009 who am i
1010 history 5
$: logout # written to the history file *here*
$: history 2 # separate user, different commands
1001 sudo su - jenkins
1002 history 2
$: sudo su - jenkins
Last login: Thu May 9 13:15:16 GMT 2024 on pts/0
$: history 5 # numbers different - dups removed by user settings
995 whoami --help | head -3
996 who --help | head -3
997 whoami
998 who am i
999 history 5
另请注意,数字不匹配 - 这可能是因为用户设置在注销时消除了重复(我做了一些测试命令)。
顺便说一句,因为你正在使用
bash
,
TERMINAL=`who am i | nawk '{print $NF}' | tr -d '()'`
可以写成
TERMINAL=$(who am i); TERMINAL=${TERMINAL#*\(}; TERMINAL=${TERMINAL%)*};
在不产生两个额外进程的情况下获得相同的结果,并且您通常应该始终优先使用
$(...)
语法而不是 `...`
语法。