이전 명령을 실행하지 않고 호출하여 변경하려면 어떻게 해야 합니까?

이전 명령을 실행하지 않고 호출하여 변경하려면 어떻게 해야 합니까?

실행하지 않고 마지막 명령을 얻는 방법이 기억나지 않습니다.

!1255 명령에 액세스하고 위쪽 화살표 키를 누를 때 명령을 수정하고 싶다고 가정해 보겠습니다. 그렇다면 명령줄에 표시되지만 실행되지는 않고 위쪽 화살표 키를 통해 액세스할 수 있도록 이 명령을 호출하는 비결은 무엇입니까?

에코를 추가하려고 시도했지만 명령 앞에 에코가 있어서 올바르게 수행하는 방법을 기억할 수 없습니다.

답변1

!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

터미널에서 Ctrl+를 누르면 R(주석에서 @gnp가 언급한 것처럼 emacs의 역방향 증분 검색 키 바인딩) 특정 명령에 대한 기록을 검색할 수 있습니다. 명령이 표시되며 실행 전에 편집할 수 있습니다. 다음과 같은 내용이 표시됩니다.

여기에 이미지 설명을 입력하세요.

원천

답변3

Ctl+alt+e쉘 확장은 bash 에서 발생하므로 입력한 !1255후 누르면 현재 행이 기록 항목 1255의 내용으로 대체됩니다.

답변4

목록을 지정할 때 실행(-l) 대신 fc 명령을 사용하고 싶습니다.

fc -ln -1

관련 정보