답변:
입력 Ctrl R명령 행에서 이전 명령을 입력 시작합니다. 결과가 나타나면 계속해서 Ctrl R다른 경기를 봅니다. 원하는 명령이 나타나면 간단히Enter
Ctrl R기본값은 while 이지만 명령 ( reverse-search-history
)을 바인딩 Ctrl T하려면 다음을 사용하여 구성 할 수 있습니다.
' "\ Ct"바인딩 : 역 검색 기록'
사용 가능한 다른 readline 바인드 가능 명령이 많이 있습니다. bash
매뉴얼 페이지를 살펴보십시오 .
Bash에는 대화식 명령 기록을 검색하고 액세스 할 수있는 많은 기능이 있습니다. 가장 기본적인 것은 history
내장입니다. 입력 만 :
$ 역사
다음과 같은 숫자 색인과 함께 명령 목록을 인쇄합니다.
$ 역사 1 클리어 2 ls -al 3 vim ~ / somefile.txt 4 역사 $
그런 다음 Mitch가 지적한 !
것처럼 인덱스 앞에 단일을 붙여 숫자 인덱스를 사용하여 이러한 명령을 실행할 수 있습니다 .
$! 1
clear
명령을 실행합니다 . 히스토리 내장에는 많은 기능이 있으며 bash
, history
man 페이지 에서 더 많은 것을 볼 수 있습니다 .
!
지정자를 사용할 때 상대 음수 오프셋을 지정할 수도 있으므로 위의 히스토리 목록을 사용하여 vim
다시 실행하려면 다음을 수행 하십시오.
$! -2
기본적으로 bash가 "두 명령 전에"실행 한 명령을 실행하도록 지시합니다. 기록 목록에서 이전 명령을 실행하려면, 우리는 그냥 사용할 수 있습니다 !!
(단지 속기이다 !-1
).
!
지정자 실행할 명령하는 수치 지정에 제한하지 않습니다. hayalci 는 bash
명령으로 시작하는 텍스트 (사용 !
) 또는 명령 자체의 텍스트 (사용 )를 기반으로 명령을 실행하도록 지시 할 수 있음을 보여주었습니다 !?
. 위의 예제 히스토리 목록을 사용하여 clear
다시 실행 하려면 다음을 입력하십시오.
$! cl
를 누릅니다 Enter. 그리고 vim
어때요? 다음과 같이 간단합니다.
$!? 일부
hayalci 의 응답 에서 가장 중요한 점 은 shopt
내장에 대한 호출입니다 .
$ shopt -s histverify
이를 통해 히스토리 검증을 사용하여 !
, !!
및 !?
지정자 와 일치하는 명령이 맹목적으로 실행되지 않고 대신 명령 행에 채워 지므로 실행하기 전에 악의가 없도록 할 수 있습니다. 이것은 루트 사용자로서 명령을 실행할 때 더욱 중요합니다. 이 옵션은 .bashrc
시작할 때마다 설정되도록 시작 파일 에서 설정할 수 있습니다 .
이미 지적했듯이이 모든 정보는 bash
맨 페이지 에서 수집 할 수 있습니다 . !, !! 및!? 지정자는 섹션 9.3 이력 확장을 살펴보십시오 .
shopt
bash_profile이 아닌 bashrc로 이동합니다 (또는 로그인 쉘이 아닌 쉘에서는 활성화되지 않습니다).
의 대안으로 crtl+R다음을 입력하여 기록을 검색 할 수 있습니다.
!text
'text'로 시작 하는 가장 최근의 명령에 대한 기록을 검색합니다 .
그러나 잘못된 명령 실행을 방지하기 위해 이것을 .bashrc에 넣는 것이 좋습니다.
shopt -s histverify
이 후 같은 것을 bash에 지시 어떤 역사 작업 (같은 !!:s/prev_text/after_text
), 그것은 명령 프롬프트로 결과 행을 배치합니다. 그런 다음 명령을 검토하거나 편집 한 후 Enter를 누를 수 있습니다.
나는 정말 좋은 별명을 가지고 있습니다. h. 실제로 "history | grep"이지만 "grep -E -v"를 사용하여 이전 "h 명령"항목을 필터링합니다.
alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "
처럼 사용
h aliases
2003 less .bash_aliases
HISTIGNORE
.
Ctrl-r을 사용한 히스토리 탐색은 번거롭기 때문에 hh 를 고려할 수 있습니다 .
https://github.com/dvorka/hstr
명령 실행을 포함하여 탐색을 훨씬 간단하고 간단하며 효율적으로 만듭니다.
ctrl + r
기본적으로 지금 바인딩됩니다
당신이 당신의 쉘이 사용하도록 구성된 경우 vi
키 바인딩 ( set -o vi
또는 필요 set editing-mode vi
에 $HOME/.inputrc
), 당신은으로 검색 <Esc>/some-command<Return>
및 히트 n
(다음) 또는 Shift-n
명령 행 역사를 통해 순환 (이전)를.
HSTR이 마음에 들지만 가끔 설치할 수없는 것 같습니다. 따라서 fzf 를 사용하여 동작 을 모방 한 별명을 작성했습니다 ( hx
", history execute").
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: 글쎄, 역사를 얻을sed
: 목록에서 숫자 열 제거 (POSIX)fzf
: 여기에 마술입니다 당신을 수 있도록 대화 형 목록을 퍼지 검색하거나 함께 이동 C-J
하고 C-K
다음으로 명령을 실행합니다 Enter
.--height
: 표시되는 줄 수를 설정합니다.--tac
: 되돌리기 목록 (히스토리에 더 논리적)--tiebreak=index
: fzf가 결과를 업데이트 할 때 히스토리 순서 유지