여러 화면 창에서 내 기록을 쉽게 검색 할 수 있습니까?


11

현재 screen세션에는 12 개의 열린 창이 있습니다. 몇 주 동안 실행 입니다 ... 지난 주에이 12 개의 화면 창 중 하나convert 에서 ImageMagick 명령을 실행 한 것을 알고 있습니다. 12 개 스크린 모두에서?history | grep convert


1
나는 zsh을 사용하고 내가 가진 setopt share_history/etc/zsh/zshrc나에게 결코 일어나지 않을해야이 문제 때문에 : P
phunehehe

답변:


18

history -a; history -c모든 창에서 실행 하여 기록을 저장할 수 있습니다 . 그런 다음 history -r새로 고칩니다.

더 영구적으로 해결하려면 다음을 추가하십시오 .bashrc.

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
감사합니다! 유일한 문제는 한 쉘에 무언가를 입력 한 다음 다른 쉘로 가서 기록을 즉시 입력하면 기록에 표시되지 않는다는 것입니다. PROMPT_COMMAND가 아직 실행되지 않았기 때문에 새로 고침이 발생하지 않았기 때문입니다. 두 번째 창에서 return 키를 누르거나 다른 명령을 실행 한 다음 history를 입력해야합니다.
Javid Jamae

1

어려운 것 같습니다. 다음은 몇 가지 유용한 방법입니다.

프로세스 계정 도구가 설치되어 있고 (Linux에 패키지라고 함 acct)이를 사용하기위한 권한이있는 경우, 언제 어떤 터미널에서 어떤 터미널을 실행했는지 확인할 수 있습니다 convert.

lastcomm convert

이것이 사용 불가능하거나 결정적이지 않은 경우, history각 bash 인스턴스에서 명령을 실행하여 명령을 찾을 수 convert있습니다. bash가 시작될 때 히스토리 파일에 있던 명령을 찾을 수 있습니다.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)화면 창의 수를 반복합니다. 현재 bash를 실행하지 않고 입력을 다르게 해석하는 다른 프로세스를 건너 뛰십시오.
  • screen -p $w stuff …지정된 창에 다음 문자열을 입력으로 보냅니다. 문자열 끝에 줄 바꿈이 필요합니다.
  • 창 3에서 실행 한 경우 파일에 /tmp/convert.history와 같은 행 목록이 포함됩니다 .3 convert foo.jpgconvert foo.jpg

1
불행히도 이것들은 작동하지 않았습니다. :-( 방금 history | grep convert모든 창에서 실행 되었습니다. 실망합니다. Gilles의 또 다른 훌륭한 답변을 받고 싶습니다!
Josh

1

tcsh를 사용하면 주기적 별명을 사용하여 세션간에 히스토리를 공유 할 수 있습니다.

.cshrc (또는 .tcshrc) 파일에서 :

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

60 분마다 기록 명령이 자동으로 실행됩니다. 이것은 홈 디렉토리의 공통 히스토리 파일에 히스토리를 저장합니다. 기록을 더 자주 업데이트하려면 tperiod 수를 줄이거 나 "periodic"명령을 실행하여 수동으로 새로 고치십시오.


0

Bash는 종료 될 때만 기록을 작성하므로 문제가 발생합니다. zsh가 활성 세션간에 히스토리를 공유 할 수 있다고 들었습니다.

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