history 명령을 실행하지 않고 명령 행에 넣습니다. history | less를 통해 찾은 명령 프롬프트에서

! n을 사용합니다. 여기서 (n)은 history | less를 통해 찾은 명령 프롬프트에서 실행하려는 기록 파일의 행을 실행하기위한 행 번호입니다.

그러나 수동으로 수정하려는 명령 줄 기록 이벤트가 있습니다. 실제로 실행하지 않고 히스토리 이벤트 컨텐츠를 명령 행에 삽입하여 수정 한 후 리턴을 누르려면 어떻게해야합니까?

베스트,



답변

히스토리 대체 후에 실행되지 않고 명령이 인쇄되도록 요청하려면 :p 수정자를 추가하십시오 ( 예 🙂 !42:p. 결과 명령도 기록에 입력되므로을 눌러 Up편집 할 수 있습니다 .

histverify 옵션 세트 ( shopt -s histverify) 가있는 경우 항상 히스토리 대체 결과를 편집 할 수 있습니다.

fc내장은 역사 확장 (아무 단어 지정자)에 제한된 액세스를 제공하고, 외부 편집기에서 이전 명령을 편집 할 수 있습니다.

!prefix시작하는 마지막 명령 을 참조 prefix하고 !?substring로 시작하는 마지막 명령을 참조하는 데 사용할 수 있습니다 substring. 찾고있는 것을 알면 시간을 많이 절약 할 수 있습니다 history | less.

이전 기록을 검색하는 또 다른 방법은 증분 검색입니다. Ctrl+를 누르고 R원하는 문자열을 입력하십시오. 보도 Ctrl+는 R지금까지 검색 문자열의 이전 선두로부터로 이동합니다 Ctrl+ S당신이 너무 멀리 갔다 한 경우. 이외의 대부분의 키 Ctrl+ R, Ctrl+ S, Backspace및 일반 문자는 증분 검색을 종료하고 자신의 일반적인 효과 (당신이 도달 한 줄에 커서를 이동합니다 예를 들어 화살표 키가 Enter명령을 실행 참조).


답변

또 다른 작은 것 : Alt+#

현재 줄을 주석 처리하여 기록 버퍼로 옮깁니다.

따라서 명령 줄을 조립할 때 파일을 찾기 위해 임시 명령을 실행해야 할 경우 Alt+를 누르고 #다른 명령을 실행하고 기록에서 위로 이동하여 주석 처리를 제거하고 진행하십시오.


답변

Enter 키를 누르기 전에 마술 공간을 사용하여 기록을 확장 할 수 있습니다. .inputrc에서 공간을 마술 공간에 매핑하십시오.

$if Bash
     Space: magic-space
$endif

이제 내역 내역 뒤에 공백을 입력 할 때마다 공백이 즉시 확장되므로 편집하고 싶을 때 편리합니다!


답변

기본적으로 history-expand-line바인딩 된 명령을 살펴보십시오 Alt+^. 그것은 당신이 편집 할 수있는 줄을 제자리로 확장합니다.


답변

Ctrl+r당신을 사용하여 기록을 검색 할 수 있습니다 :

pbm@tauri ~ $ 
(reverse-i-search)`xran': xrandr -o normal

찾은 모든 명령을 편집 할 수 있습니다 …


나는 당신이 필요로 정확히 찾을 수 있다고 생각 : 실행 shopt -s histverify하고 다음 번에 사용할 때 !n명령을 실행 만 라인을 명령 두지됩니다 …


답변

나는 종종 이것을 원했다. csh (및 tcsh)를 사용할 때 관용구가있었습니다.
!:88*:p

이 관용구는 현재 명령 행에서 입력하는 지점 (일반적으로 끝 부분)에서 이전 명령의 “마지막 단어를 통해 단어 88″을 삽입합니다. csh에서 이러한 표현식이 단어를 생성하지 않는 것은 오류가 아닙니다. 즉, 단어 88 또는 그 뒤에 나오는 단어가 필요하지 않습니다. 단어 88이 없으면 입력중인 명령의 끝에 단어가 추가되지 않은 다음 결과 명령 줄을 실행하지 않고 기록으로 푸시합니다.

아시다시피,
*! (!! 및! -1과 같은)이 이전 명령입니다.
* : 88은 단어 88 (첫 번째 단어-일반적으로 명령-0)이며 csh에는 그러한 단어가 필요하지만 …
* : 88 *는 단어 88에서 시작하는 모든 단어이며 csh는 단어가 존재하지 않아도된다.
* : p는 인쇄를 의미하지만 명령 행을 실행하지는 않습니다.
: p를 사용하거나 사용하지 않고 명령 행이 명령 히스토리에 추가됩니다.

“왜 88?” 궁금해하실 겁니다? *와 같은 키이므로 필요합니다. 긴 명령이 있다면 아마도! : 888 * : p가 필요할 것입니다. 죄송합니다 .bash AFAIK에서는 작동하지 않습니다. 배쉬는 단지
bash: :88*: bad word specifier

재미있는 사실 : 일반적으로 당신의 명령이 우선 일 필요는 없습니다.
> /tmp/foo echo My command is word 3
bash 및 csh에서 유효합니다.


답변

나는 보통 Ctrl+ r를 사용 하여 검색 한 다음 Ctrl+ e를 사용하여 줄 끝으로 이동합니다.