Bash
即使將 histappend 設置為 on,bash 也會覆蓋歷史記錄
我正在嘗試將 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
您沒有查看文件中儲存的內容。為此,您需要以下內容:
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
發出命令時。簡而言之,只有在寫入歷史文件時。