使用su用户后运行的命令未保存命令历史记录

问题描述 投票:0回答:1

我们使用下面的方法来保存命令历史记录,在我们发出命令

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
之后运行的命令历史记录 我正在使用

蒂亚

linux bash shell su
1个回答
0
投票

历史文件仅存储当前用户的命令。
文件仅在退出时更新。

对于那些可能对假设的用户与发出

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%)*};

在不产生两个额外进程的情况下获得相同的结果,并且您通常应该始终优先使用

$(...)
语法而不是
`...`
语法。

© www.soinside.com 2019 - 2024. All rights reserved.