명령을 변경하기 위해 실행하지 않고 이전 명령을 호출하는 방법은 무엇입니까?


14

마지막 명령을 실행하지 않고 얻을 수있는 트릭을 기억할 수 없습니다.

위쪽 화살표 키를 눌렀을 때! 1255 명령에 액세스하고 명령을 수정할 수 있기를 원합니다. 명령을 호출하는 트릭은 무엇입니까? 명령 행에 표시되지만 실행되지 않고 나중에 화살표 키를 통해 액세스 할 수 있습니까?

나는 에코를 넣어 보았지만 명령 전에 에코가 있는데 올바르게 수행하는 방법을 기억하지 못합니다.


4
귀하의 요청을 올바르게 이해한다면 "! 1255 : p"와 같이 ": p"접미사를 사용해보십시오
Theophrastus

@Theophrastus 네, 정확히, 나는 이것을 잊었습니다 : p part. 구글에서 올바른 키워드를 찾지 못해 그것을 찾을 수 없었습니다 ... 고마워.
Arturas M

답변:


21
!1255:p

이것을 할 것인가

!히스토리 리콜
1255은 행 번호가
:p인쇄되지만 실행되지는 않습니다.

그런 다음 위쪽 화살표를 사용하여 이전 (실행되지 않은) 명령을 다시 가져 와서 필요에 따라 변경할 수 있습니다.

나는 종종 이것을 hg가장 좋아하는 별명 인 ( "History Grep") 와 결합합니다 .

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

대소 문자와 상관없이 최근 히스토리 라인에서 텍스트를 검색하며 다음과 같이 사용됩니다.

특정 파일을 편집하기 위해 최근 vi 명령을 검색하려는 경우 그 중 하나를 재사용하여 동일한 파일을 편집하지만 파일 확장자가 다른 파일을 편집하려고합니다.

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

또한 hga전체 히스토리를 검색하도록 ( "History Grep All")을 정의합니다 .

$ alias hga
alias hga='history | grep -i'

내 역사가 (의도적으로) 매우 커서 출력이 너무 많아 나중에 터미널의 페이지를 통해 스크롤하는 데 영향을 미치기 때문에 많이 사용하지 않습니다.


2
참고 hg또한 의욕의 CLI .
usandfriends

1
좋은 메모입니다. 답변을 추가했습니다.
Michael Durrant

12

명중 Ctrl+를 R터미널에서 (@gnp이 코멘트에 손짓으로 바인딩 이맥스 '역 증분 검색 키를 어느 것은) 특정 명령에 대한 histrory에서 검색 할 수 있습니다. 명령이 표시되고 실행 전에 편집 할 수 있습니다. 다음과 같은 것을 보게 될 것입니다.

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

출처


1
감사! 실제로 내 질문에 대한 직접적인 대답은 아니지만 이것을 알지 못했고 실제로 유용하다고 생각합니다. 대단히 감사합니다!
Arturas M

1
또한 Ctrl + R은 emacs의 역 증분 검색입니다. 많은 emacs 키 바인딩은 Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + Y 등의 많은 GNU 도구에서 작동합니다.
GnP

@gnp 정보를 주셔서 감사합니다, 나는 그것을 몰랐습니다.
Hamza Abbad

두 가지 중요한 것을 배우고 나서 ctrl-r에 익숙해지기까지 오랜 시간이 걸렸습니다 . 1. 입력하는 동안 출력을 무시하십시오. 2. 원하는 명령에 대해 고유하게 입력 할 수있을만큼 충분히 알고 있어야합니다.
Michael Durrant

7

fc명령은 당신이 원하는 것을

fc -l <number> 해당 번호 주위의 명령 기록을 표시합니다

fc <number>명령 줄 항목을 열거 vim나 (또는 ​​기본 편집기가 생각하는대로) 편집 할 수 :wq있으며 위쪽 화살표로 사용할 수 있습니다.


7

bash에서 Ctl+alt+e쉘 확장을 수행 하므로이 !1255조합 을 입력 한 다음 누르면 현재 행을 히스토리 항목 1255의 내용으로 대체합니다


우분투에서 나를 위해 그것을하지 않았다
마이클 Durrant

@ MichaelDurrant, 나는 방금 14.04 (kubuntu)에서 시도해 보았고 그것은 나를 위해 작동합니다. 로 문서화되어 man bash있습니다 shell-expand-line. gnome-terminal에 대한 바로 가기 세트가있을 수 있습니다.
adonis

@adonis 나는 이것을 알지 못했습니다. 정말로 감사합니다. 실제로 요청한 것도합니다. 그리고 실제로이 기능에서 더 많은 용도를 찾을 수 있습니다. 대박! 감사!
Arturas M

4

실행 (-l) 대신 list를 지정하는 동안 fc 명령을 사용하려고합니다.

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