我试图将 bash 历史记录写入文件 ( ...| 1 |...
),然后更改环境变量...| 2 |...
中的一个字符 ( )HISTTIMEFORMAT
运行几个命令,并能够查看第一次运行的命令以及第二次运行的命令。
问题:
- 为什么当我更改值时,它会更改同一“列”中之前的所有值?
- 为什么
shopt -s histappend
没有区别?
操作系统:
[root@test ~]# cat /etc/*-release
CentOS release 6.10 (Final)
[root@test ~]# export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
872 Wed Jun 17 | 22:14:48 | 1 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
873 Wed Jun 17 | 22:14:50 | 1 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
874 Wed Jun 17 | 22:14:52 | 1 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
[root@test ~]# export HISTTIMEFORMAT='%a %h %d | %T | 2 |'; shopt -s histappend; echo 2; history 3
873 Wed Jun 17 | 22:14:50 | 2 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
874 Wed Jun 17 | 22:14:52 | 2 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
875 Wed Jun 17 | 22:15:02 | 2 |export HISTTIMEFORMAT='%a %h %d | %T | 2 |'; shopt -s histappend; echo 2; history 3
答案1
您没有查看文件中存储的内容。为此,您需要类似的东西:
tail -n 6 "$HISTFILE"
这将打印 6 行,对应于文件中存储的 3 个命令行。
$ export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
1
15891 Wed Jun 17 | 20:18:27 | 1 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 5
15892 Wed Jun 17 | 20:18:41 | 1 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 6
15893 Wed Jun 17 | 20:18:44 | 1 |export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
$ tail -n 6 "$HISTFILE"
#1592439521
export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 6
#1592439524
export HISTTIMEFORMAT='%a %h %d | %T | 1 |'; shopt -s histappend; echo 1; history 3
#1592439630
tail -n 6 "$HISTFILE"
假设历史文件在执行的每个命令上都会更新。
请注意,实际存储的每个命令之间有一个注释行。
该注释行实际上存储了执行每个命令时的 Unix 纪元(以秒为单位)。例如,该值:1592439630
转换为通过 给出的格式TIMEFORMAT
。这是一转换为其他格式的简单数字。当您更改格式时,相同的数字将转换为不同的格式。因此,无法将某些数字转换为一种格式,而将另一些数字转换为其他格式。
设置histappend
或不设置会影响完全不同的东西,而不是打印值的格式。它使每个命令(不带任何格式)附加到历史文件中,但仅当 shell 退出或history -w
发出命令时才附加到历史文件中。简而言之,只有历史文件被写入。