배쉬 히스토리 검색, 부분 + 위쪽 화살표


146

나는 검색했지만 이것에 대해 아무것도 찾지 못했습니다. 터미널을 사용하여 bash의 기능을 찾고 있습니다.

되돌아 가면 데비안 시스템에 사용자가 있었고 친구가 편리한 기록 검색 기능 (나가 tcsh를 사용했다고 생각합니다)으로 설정했습니다. 이전 명령의 시작 부분을 입력하고 위쪽 화살표를 누르십시오. 부분 문자열을 기반으로 검색을 수행합니다.

예를 들어 내 역사가 :

./script.pl
./script.pl arg1
cat output
cat output | grep yada

그리고을 입력 .하고 위쪽 화살표를 누르면 다음과 같이 표시 ./script.pl arg1됩니다. 다시 누르면 ./script.pl등 이 표시됩니다 .

grep.bash_history에서 수행하는 것과 매우 유사합니다 . 이 기능을 사용할 수있는 방법이 있습니까?



1
@Marcel 같은 대답 일 것 같습니다. 검색에서 그것을 보았지만 iPython 및 Shell 키워드를 사용하여 내 질문에 연결하지 않았습니다.
TLP

답변:


197

에 다음 줄을 넣으십시오 ~/.inputrc.

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

로 시작하는 줄 #은 주석입니다. 나는 무엇을 뒤로하고 앞으로 무엇을 기억하지 못합니다. 그것으로 실험하십시오. 어쩌면 앞뒤로 전환해야 할 수도 있습니다.


약간의 배경 정보 :

Bash는 readline 을 사용하여 프롬프트를 처리하고 있습니다. ~/.inputrcreadline의 구성 파일입니다. 이것은 readline 라이브러리를 사용하는 다른 소프트웨어 (예 : IPython)에서도 적용 됩니다.

readline에 대한 자세한 정보 는 bash 매뉴얼 을 읽으십시오 . 또한 더 많은 히스토리 관련 readline 명령을 찾을 수 있습니다 .

화살표 키의 이스케이프 코드를 얻으려면 다음을 수행하십시오.

  1. cat터미널에서 시작하십시오 ( cat추가 인수는 없습니다).
  2. 키보드의 키를 입력하면 ^[[A위쪽 화살표 및 ^[[B아래쪽 화살표 와 같은 것들이 나타 납니다 .
  3. 교체 ^[와 함께 \e.

1
훌륭하지만이 솔루션은 ctrl-left / ctrl-right 단축키를 비활성화합니다.
Eyal

누구든지 내가 어떻게 동일하게 달성 할 수 있는지 말해 줄 수 있습니까
Hitesh Kumar

@ lesmana, 나는 고양이 부분 혼자 추가 포인트를 줄 것이다
마이크 D

@Eyal을 둘째로, 누구든지 내가 이것을 가질 수 있지만 ctrl-left / ctrl-right 단축키를 유지하는 방법에 대한 조언이 있습니까?
kbrose

6
모든 기본값을 유지하려면 $include /etc/inputrc가급적 첫 번째 줄 에을 추가하십시오 .
Tulio Casagrande

31

다음 내용으로 /etc/profile.d/에 모드 644로 setup_readline.sh라는 파일을 작성하고 로그인 한 후 원하는 키를 확인하십시오.

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

나는 이것을하는 가장 좋은 방법이라고 생각합니다. 대부분 요리사, 꼭두각시 등의 구성 관리 시스템을 사용하는 경우

그리고 시스템 설정은 여전히 ​​그대로입니다!


4
이상하게도 ~ / inputrc는 저에게 효과가 없었지만 이러한 명령을 .bash_profile에 넣는 것이 좋습니다.
Joe

1
.inputrc가 내 홈 폴더에 존재하지 않으며 어쨌든 .bashrc에 이러한 종류의 설정을 선호하므로 설정을 위해 하나의 파일을 가지고 다닐 수 있습니다. 따라서 이것은 아마도 더 나은 대답 일 것입니다.
Shital Shah

.inputrc는 나를 위해 훌륭하게 작동하지만로드 후에는 작동하지 않습니다 screen. 이상한 점은 다른 .inputrc 단축키는 작동하지만 이것들은 아닙니다. 그래서 지금 두 솔루션을 모두 사용합니다.
Orwellophile

예를 들어 서버에 로그인하여 작업을 수행 할 때 서버에서 ~ / .inputrc를 편집하고 다시로드하지 않으려는 경우 매우 유용합니다.
danmactough

13

Ctrl + R은 이런 종류의 기능을 제공합니다. 부분 명령을 입력하기 시작하면 위와 아래 화살표로 탐색 할 수있는 이전 명령이 나타납니다. 추가 정보 : http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell


2
답장을 보내 주셔서 감사합니다. 예, 나는 그것을 시도했지만 조금 까다 롭습니다 ... 부분으로 시작하는 명령을 스크롤 할 수 없으며 첫 번째 항목 만 표시합니다. 또한 문자 전체를 검색하여 쓸모가 없습니다.
TLP

5
@TLP, 반복 타격Ctrl+r
akostadinov

4

Trusty 14.04에서 작성해야하는 "~ / .inputrc"에 대한 lesmana의 답변을 완료하려면 "~ / .bashrc"를 확인 / 추가하십시오 (첫 번째 줄은 이미 "~ / .bashrc"에 있음).

shopt -s histappend  
PROMPT_COMMAND='history -a'  

https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique 에서 프랑스어로 이미 설명되어 있습니다 .


2
이 명령은 기본적으로 세션 종료를 기다리지 않고 bash가 히스토리 파일에 명령을 즉시 추가하도록 지시합니다. 많은 터미널이 열려 있고 하나의 기록을 잃고 싶지 않지만 필요하지 않은 경우에 유용합니다. digitalocean.com/community/tutorials/…
Shital Shah

3

아마도 https://github.com/dvorka/hstr 을 사용하여 메트릭을 기반으로 (빈도, 명령의 빈도 및 길이가 중요한) Bash 기록을 간단하고 여러 줄로 간단하게 필터링 할 수 있습니다. 히스토리를 쉽게 탐색 할 수있는 화살표 키 :

여기에 이미지 설명을 입력하십시오

그것은 쉽게 할 수 바인딩Ctrl-r및 / 또는Ctrl-s


0

다음 솔루션은 위에서 언급 한 접근 방식 중 일부를 결합하고 확장 합니다. 다음 동작을 수행하려면 ~/.bash_aliases파일에 다음 줄을 추가 하십시오 (필요 없음 ~/.inputrc).

  1. CTRL + UP 및 CTRL + DOWN을 눌러 기록에서 위 / 아래로 이동합니다 (접두사가 동일한 항목 만). 이것은 UP과 DOWN만으로 전체 히스토리에서 위 / 아래로 이동하는 표준 기능과 공존 할 수 있습니다.
  2. Ctrl + 오른쪽 및 Ctrl + 왼쪽을 눌러 명령 줄에서 다음 / 이전 단어로 이동
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'

source ./bash_aliases변경 사항을 적용하려면 셸에 다시 로그인하십시오 (또는 run ).

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