여러 Konsole 터미널을 사용합니다. 각 터미널에 입력한 모든 명령을 명령 기록에 저장하여 다음에 여는 콘솔에 해당 명령이 모두 포함되도록 하고 싶습니다. 각 터미널이 다른 터미널의 명령 기록을 덮어쓰는 것을 방지하기 위해 내 파일에 다음 설정이 있습니다..bashrc
# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1
프롬프트에서 명령 번호를 확인하기 위해 마지막 줄을 제공했습니다. 주문 번호. 600개를 초과한 적은 없지만 이전 명령 중 일부는 여전히 기록에서 사라지고 있습니다. 반복적으로 제공되는 명령이 많지만 예상대로 ignoredups
no 명령을 프롬프트에 추가하지 않습니다. 그러나 오래된 명령은 여전히 사라지고 있습니다. 역사적으로 명령 수는 500개가 조금 넘는 수준으로 유지되었습니다.
파일이 무시되었지만 .bash_history
여전히 많은 수의 중복 파일이 포함되어 있습니다.
$HISTSIZE
추신 : echo의 출력과 $HISTFILESIZE
둘 다입니다.=1000
업데이트: 위 항목에서 문제를 발견했습니다 .bashrc
. .bash_history에 마지막 새 명령을 추가 history -a
하려면 호출하세요 . PROMPT_COMMAND
따라서 효과 ignoredups
가 erasedups
없습니다.
모든 터미널에서 반복하지 않고 .bash_history에 쓸 수 있는 방법이 있나요? 각 명령 프롬프트에 전체 기록을 로드 history -r
하고 쓰기 저장을 다시 사용하고 싶지 않습니다 history -w
. 한 터미널에서 실행한 명령이 병렬로 실행되는 다른 터미널에도 나타나기 때문입니다. 결합된 명령이 새 터미널에만 나타나기를 원합니다.
내 이력이 500으로 잘린 이유에 대한 미스터리가 풀렸다. 나는 이 컴퓨터에 SSH를 연결할 때마다 이런 일이 발생한다는 것을 알았습니다. .bash_profile
다음 항목으로 항목을 생성하면 문제가 해결되었습니다.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
이제 ssh를 할 때마다 내 .bashrc도 실행됩니다. 이제 기록 파일 크기가 단조롭게 증가합니다.
답변1
나는 새로운 명령을 직접 추가하는 동시에 중복된 명령을 제거하는 것이 불가능하다는 결론에 도달했습니다. 그래서 내 솔루션은 나중에 다음 명령을 실행하는 것이 었습니다. 아니면 내 crontab에 넣으세요.
tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp
mv $HOME/.hist_Temp $HOME/.bash_history
위 명령은 명령의 마지막 항목을 유지하고 순서를 섞지 않고 기록 파일에서 그 위에 있는 다른 모든 중복 항목을 제거합니다.
답변2
보기 흉 sed
하고 awk
더 좋을 수도 있지만 다음을 추가하여 동일한 문제를 해결하려고 했습니다 .bashrc
.
export HISTFILE=.bash_history_`tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))'`
이렇게 하면 열려는 각 터미널에 대해 별도의 기록 파일이 생성되지만, bash 내에서 bash를 실행하면 동일한 기록이 사용되지만 덮어쓰면 안 됩니다. 내 경험을 바탕으로 경고하겠습니다. 이 방법은 효과가 있고 기록을 덮어쓰는 것을 방지하지만, grep
찾고 있는 기록을 찾으려면 여러 파일을 사용해야 하며 , 이는 때때로 매우 시간이 많이 걸릴 수 있습니다.