History 명령이 HISTFILE의 모든 행을 표시하지 않습니다.

History 명령이 HISTFILE의 모든 행을 표시하지 않습니다.

이 명령을 사용하면 cat -n $(echo $HISTFILE) | grep -v "#"4000줄이 넘습니다. (grep은 histfile에 추가된 타임스탬프를 생략합니다)

1 pwd
...
2017 cd ~
...
4033 git push

하지만 이 명령을 사용하면 history2000개가 넘는 행만 표시됩니다.

1 18/09/19 11:00:38 cd ~
...
2017 30/10/19 09:41:50 git push

내 기록 명령에서 줄의 절반이 생략된 이유는 무엇입니까?

$HISTFILE타임스탬프가 원인인 것으로 의심됩니다 . 하지만 이 동작을 어떻게 피할 수 있습니까? 아니면 의심이 잘못된 걸까요?

env명령 에 사용되는 변수를 history다음과 같이 수정했습니다 .

export HISTFILESIZE=
export HISTSIZE=
export HISTFILE=~/.bash_eternal_history
export HISTTIMEFORMAT="%d/%m/%y %T "

무제한 기록과 추가 타임스탬프를 원하기 때문에 이러한 수정을 수행했습니다. 나는 이것을 유지하고 기록 명령을 출력하고 싶습니다 HISTFILE.

나는 사용하고있다운영 체제 cat /etc/*release:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

답변1

History 명령은 현재 bash 세션의 기록만 나열하는 반면, 이 파일에는 모든 bash 세션의 기록이 포함됩니다. 따라서 세션의 실행 기록에는 파일보다 적은 결과가 표시될 가능성이 높습니다. 또한 기록은 "최근" 명령을 찾는 데 사용되므로 $HISTSIZE를 기준으로 길이가 제한됩니다(사용자 환경에서 HISTSIZE를 늘리려면 다음을 참조하세요).이 토론).

기록 파일의 모든 최신 명령을 포함하도록 특정 세션의 기록을 업데이트하려면 -r 또는 -n을 사용하여 기록을 실행합니다. 매뉴얼 페이지에서:

-n: 기록 파일에서 읽지 않은 기록 줄을 현재 기록 목록으로 읽어옵니다. 이는 현재 bash 세션이 시작된 이후 기록 파일에 추가된 줄입니다.

-r: 기록 파일의 내용을 읽고 이를 현재 기록 목록에 추가합니다. ):

user@machine:~> history
994  ssh server
995  history --help
996  man history
997  history

997개의 행만 반환되었습니다.

user@machine:~> history -r

새로 고치다...

user@machine:~> history

994  ssh server
995  history --help
996  man history
997  history
998  history -r
999  ping 10.10.10.10
1000  ping 10.10.10.1
...
1992  ssh server02
1993  history

이제 1993개의 명령이 나열됩니다. 따라서 열고 사용하는 다른 터미널에서 추가한 기록을 포함하면 원본 파일($HISTFILESIZE로 제한됨)을 읽는 것과 유사한 출력(후행 $HISTSIZE 라인)이 제공됩니다. 미묘한 차이점에 유의하세요... -n은 현재 bash 세션 라인을 읽고, -r은 전체 파일을 읽습니다.

관련 정보