bash에서 히스토리 파일을 통합 할 수 있습니까?


35

screenLinux 데스크탑 및 서버에서 일상적으로 여러 세션을 실행 합니다.

이것의 문제는 grep명령 내역을 통해 다른 세션에서 명령을 발행했으며 해당 내역 항목을 얻으려면 분리했다가 다시 연결해야한다는 것입니다.

여러 세션에서 서로 다른 방식으로 업데이트 된 기록을 '강제'하여 중앙 기록으로 이동할 수 있습니까?


터미널 세션 간의 기록을 볼 수없는 비슷한 문제가 발생했습니다. 내 ~ / .bash_history 파일은 루트가 소유하고 있으며 쓸 수는 없습니다. 문제는 내 사용자에게 소유자 / 그룹을 고정 변경 : sudo는 대한 Chown <사용자> : <그룹> ~ / .bash_history 파일
마테오

답변:


41

당신이해야 할 두 가지가 있습니다 :

  1. 에 명령 shopt -s histappend을 삽입 하십시오 .bashrc. 기록 파일을 덮어 쓰지 않고 추가합니다.
  2. 또한 .bashrc, insert PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"및 history 파일은 bash가 프롬프트를 표시 할 때마다 다시 쓰고 다시 읽습니다.

편집 : history -n트릭을 위한 e-t172 덕분에


6
고마워 PROMPT_COMMAND = "$ PROMPT_COMMAND; history -a; history -n"을 사용하여 추가로 개선했습니다. 이렇게하면 다른 세션에서 실행 된 명령이 현재 세션 기록에 즉시 나타납니다 (기록을 업데이트하려면 먼저 Enter 키를 눌러야 함).
Etienne Dechamps

8
PROMPT_COMMAND이전에 정의 하지 않았 으므로 PROMPT_COMMAND="history -a; history -n"오류를 피하기 위해 사용해야 했습니다.
윌리엄 잭슨

1
올바른 기록 -a, -c 및 -r 명령에 대해서는 superuser.com/a/734410/250287 답변을 참조하십시오 .
mtd

새로운 이민자에게 경고 : 한동안 기록을 다시 쓴 후, 나는 종종 잘못된 명령을 내리고 있다는 것을 깨달았습니다. 이전 줄에서 일부 명령을 볼 때 위쪽 화살표가 반복 될 것으로 예상하며,이 구성에서는 더 이상 항상 그런 것은 아닙니다.
Tiago

10

을 (를) 사용 history -a; history -n하지 마십시오. 예상대로 작동하지 않으며 기록에 순서가 잘못된 여러 명령이 남게됩니다. 일반적으로 예상대로 작동하는 솔루션은 다음과 같습니다.

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

세미콜론 대신 줄 바꿈을 사용하는 것도 PROMPT_COMMAND의 누락 / 중복 세미콜론 문제를 해결하는 짧은 방법입니다.


history -a, -c, 그리고 -r이 맞습니다 ... 이것은 정답입니다
mtd

1
export필요하지 않습니다. 대화식 쉘 옵션은 ~/.bashrc모든 서브 쉘에서 호출되는 것으로 설정 되므로 상속이 필요하지 않습니다.
고인돌

PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"대신 사용하지 않는 좋은 이유가 있습니까?
Six

많은 프롬프트 명령에 의존하거나 표시하기 때문에,이 순서는 히스토리 명령을 실행하기 전에 마지막 종료 값을 저장해야합니다.
Adam Crane

-1

일부 배포판에서는 기본적으로 PROMPT_COMMAND가 정의되어 있지 않습니다. 예를 들어, 아치에는 정의되어 있지만 데비안에는 정의되어 있지 않습니다.

배포판 호핑 중에 사용하는 Dropbox에 bashrc가 있으며 여기에는 다음이 포함됩니다.

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"

기본적인 쉘 프로그래밍 문제에 대한 끔찍한 해결책. 올바른 길 :PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n"
고인돌

PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n'
고인돌
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.