it-swarm-ko.tech

쉘의 역사를 검색하는 가장 좋은 방법

Grep보다 내 히스토리 파일에서 명령을 검색하는 더 좋은 방법이 있습니까? 나는 명령이 무엇으로 시작되는지 전혀 알지 못하지만, 역사가 얼마나 멀리 있는지 잘 모르겠습니다.

pdate : 이전에는 zsh에 따라 다르지만 중복되는 답변으로 인해 여기에서 모든 쉘 (또는 모드 (vi/emacs))에 대해 자유롭게 답변하십시오.

82
xenoterracide

Ctrl+R descriptor said 와 같이 일반적으로 가장 좋은 방법입니다. string로 시작하는 최신 명령을 실행하는 !string 또는 string를 포함하는 최신 명령을 실행하는 !?string?를 사용할 수도 있습니다.

(나는 이것이이 질문과 관련된 유일한 물건이라고 생각하지만 this answer 에서 훨씬 더 많은 기록 명령을 다뤘습니다)

78
Michael Mrozek

Bash를 사용할 때 다음을 입력하십시오. Control-R 입력을 시작하십시오. 타자 Control-R 일부 텍스트를 입력 한 후 반복적으로 일치하는 명령 행으로 돌아갑니다.

32
grendel

이것이 도움이되는지 확실하지 않지만 사용하고 싶습니다. ctrl-r 그런 다음 명령 입력을 시작하십시오. 그것은 당신의 역사를 통해 첫 번째 경기를 제시해야합니다. 맞은 경기를 전환하려면 ctrl-r 다시.

18
decriptor

~/.inputrc에 다음을 추가하면

"\e[5~": history-search-backward
"\e[6~": history-search-forward

bash를 다시 시작하면 입력을 시작할 수 있습니다. Page Up 과 Page Down 방금 입력 한 것과 동일한 접두사로 시작하는 행 기록을 앞뒤로 이동합니다.

(일부 경우 \e[A\e[B를 사용하는 것이 좋습니다. Up 과 Down 새 키를 바인딩하는 대신 작업).

17
ephemient

에 의해 호출 된 대화식 프롬프트 Ctrl-R이미 언급 한 가장 편리한 방법입니다. 또한 다시 매핑하는 것이 유명합니다 Up 과 Down 화살표 키를 사용하여 현재 명령 행에있는 접두사에 대한 히스토리를 검색 할 수 있지만 ~/.inputrc 파일로 변경 가 필요합니다.

대화식이 아닌 고전적인 솔루션은 셸 기록 확장을 사용하는 것입니다. 타자

!foo

foo로 시작하는 마지막 명령을 실행하고

!?foo

foo가 포함 된 마지막 명령을 실행합니다. 히스토리 확장에 대한 자세한 정보는 쉘이 Bash이거나 호환되는 것으로 가정하여 Bash reference manual 에서 찾을 수 있습니다.

9
Adam Byrtek

stty -ixon 너의 ~에게 ~/.bashrc 다음 파일 Ctrl-s 반대 방향으로 갈 것이다 Ctrl-r.

!ls를 입력하면 bash는 히스토리를 살펴보고 "ls"로 시작하는 최신 명령을 실행합니다.

3
Kevin M

zsh에 따라 다를 수 있습니다. 연구에서 이 답변 I foundvi-history-search-backward로 검색 할 수 있습니다 / vi 모드 (내가 언급하지 않은)에서 다음을 사용할 수 있습니다 n 과 N 을 누른 후 각각 앞뒤로 검색 enter).

2
xenoterracide

이것이 언급되지 않은 것에 놀랐습니다. 그러나 이것을 수행하여 bash 또는 ksh에서 vi 모드를 선택할 수 있습니다 :

set -o vi

... 또는 이것을 ~/.inputrc의 내용으로 사용 (bash와 같은 프로그램에서 사용되는 GNU readline의 경우) :

set editing-mode vi

그런 다음에는 Esc  명령 모드 로 들어가서 k 역사 속으로 돌아가고 j 앞으로. 를 사용하여 검색 할 수도 있습니다 / 정상적으로 검색하고 ? 반대로 검색합니다.

~/.inputrc을 사용하면 GNU bash뿐만 아니라 CLISP와 같은 GNU readline 및 MySQL 명령 셸과 같은 프로그램을 사용하는 모든 항목에서 작동합니다 CPAN Shell처럼.

2
Mei

역방향 검색을 사용할 때 앞으로 전환하려면 (Ctrl-R 명령 사용) :

  1. .bashrc 파일을여십시오 :
    Sudo gedit ~/.bashrc

  2. 이 줄을 추가하십시오 (문자 "f"는 아직 시스템에서 사용하지 않는 다른 것으로 바뀔 수 있습니다)

    bind '"\C-f": forward-search-history' 
    
  3. 파일을 닫고 다음 명령으로 .bashrc를 업데이트하거나 다른 터미널을 엽니 다.
    source ~/.bashrc 또는 . ~/.bashrc

이제 SHORTCUT을 사용하여 기록에서 앞으로 이동할 수 있습니다. Ctrl + f

우분투 18.04 LTS 작업

2
Franklin TCHATATH

나는 대부분 다음 두 가지를 사용합니다.
그러나 둘 다 시작 문자를 검색합니다.

  1. tcsh : 명령의 몇 문자를 입력 한 다음 Esc+p 해당 키 시퀀스로 시작하는 이전 명령이 표시되고 다시 누르면 다른 명령이 표시됩니다.
  2. ksh : 사용 fc -e - <SPACE><first few char for your previous > 이것은 해당 순서와 일치하는 마지막 명령을 실행합니다.

나는 같은 것을 찾을 수 없었다 Ctrl+R 내 ksh와 tcsh를 위해 Bash에서.

1
Hemant

사용하는 방법이 있습니다 Ctrl-R tcsh로. ~/.cshrc에 다음을 추가하십시오.

bindkey "^r" i-search-back (캐럿 부호 및 문자 r)

그것은 나를 위해 가장 큰 시간 절약입니다.

1
Alain

@ephemient와 비슷한 대답이지만 .bashrc에 넣을 수 있습니다

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

문구의 일부를 입력 한 다음 위/아래 화살표를 사용하여 가장 일치하는 최신 옵션을 찾아보십시오. 이것이 matlab의 기본 동작입니다.

대부분의 경우 설정을 새 시스템으로 이식하려면 ~/.bashrc 그러면 ~/.inputrc

1
Matt S.

예, 적어도 zsh를 사용하는 경우 존재합니다. 명령을 입력하기 시작한 다음 M-p (ESCp)를 입력하면 입력 한 내용과 일치하는 이전 명령이 표시됩니다. 다시 누르면 다음 경기를 찾습니다.

0
dkagedal