명령을 입력하지 않은 경우 Ubuntu 터미널에 명령을 저장하는 방법이 있습니까?

명령을 입력하지 않은 경우 Ubuntu 터미널에 명령을 저장하는 방법이 있습니까?

Ubuntu의 터미널에 명령을 저장하는 빠른 방법이 있는지 궁금합니다. 시나리오는 다음과 같습니다.

질문:

  1. [긴 명령어]를 입력하세요
  2. [긴 명령]을 실행하기 전에 [다른 명령]을 실행해야 한다는 것을 잊어버렸습니다.

#명령어 를 그냥 앞에 붙여서 상하 키 히스토리에 넣는 것 보다 나중에 쉽게 사용할 수 있도록 명령어를 저장할 수 있었으면 좋겠습니다 . 레지스터나 클립보드에 직접 저장하는 것이 더 좋습니다.

나는 그것을 반향하고 싶지 않다는 것을 언급하는 것을 잊었습니다.

답변1

이건 네 것이 아니야단말기, 이것은 당신 것입니다껍데기.

찾고 있는 쉘 메커니즘의 이름은 다음과 같습니다.버퍼 종료. 사람들은 쉘 명령줄 편집기에 이러한 기능이 있다는 사실을 잊어버립니다. Bourne Again 쉘의 GNU Readline, (FreeBSD) Almquist 쉘의 libedit, Korn 쉘의 라인 편집기 및 TENEX C 쉘의 라인 편집기와 마찬가지로 Z 쉘의 ZLE에는 이러한 기능이 있습니다.

모드의 모든 쉘에서 emacs저장하려는 행의 끝으로 이동하고 ⎈ Control+를 사용하여 종료 버퍼의 헤드까지 종료하고 U중간 명령을 입력 및 실행한 다음 ⎈ Control+를 사용하여 종료 버퍼 내용을 추출합니다. Y. 중간 명령을 입력할 때 종료 버퍼에 대한 작업이 수행되지 않도록 하십시오.

모드의 Z 셸에서는 접두사 시퀀스를 사용하여 줄이 종료될 명명된 스타일 버퍼를 지정할 vi수 있습니다. 기본 버퍼 대신 다른 버퍼 중 하나를 사용할 수 있습니다. (모드에서 ) 와 같은 것을 사용하여 전체 라인을 버퍼 "a"로 삭제하고 중간 명령을 입력 및 실행한 다음 해당 버퍼의 내용을 .vivi" a d dvicmd" a p

해당 모드에서 viKorn 쉘의 GNU Readline, Bourne Again 쉘 및 (FreeBSD) Almquist 쉘의 libedit에는 명명된 vi스타일 버퍼가 없고 단일 컷 버퍼만 있습니다. d d해당 버퍼의 행을 삭제하고 p버퍼 내용을 , 와 함께 넣으십시오. 그러나 vi중간 명령을 입력할 때 Kill 및 Yanking과 동일한 스타일 버퍼를 사용합니다.

답변2

echoI/O 리디렉션이 있을 수 있고 계속 실행될 수 있으므로 라인에 추가(또는 기타 무작동 유형 명령)를 추가하고 싶지 않으며 , 준비가 될 때까지 여전히 액세스해야 할 파일을 덮어쓸 수 있습니다. 명령을 실행하기 위해).

대신 줄의 시작 부분으로 이동하여 주석 문자를 입력하세요 #. 그런 다음 을 누르면 Enter해당 회선이 기록에 저장됩니다.

vi 모드에 있는 경우 ksh 및 bash(적어도)에는 특정 명령이 있습니다. 명령 모드로 들어가서(누르기 Esc) 해당 #문자를 누르십시오.

이는 특히 이 사용 사례를 위한 것입니다. O'Reilly의 이 명령에 대한 설명Korn Shell 배우기그 책은 이렇게 말합니다.

행 앞에 #(주석 문자)을 추가하고 이를 기록 파일로 보냅니다. 나중에 다시 입력할 필요 없이 실행할 명령을 저장하는 데 유용합니다. 줄이 이미 #으로 시작하는 경우 여러 줄 명령에서 개행 문자 뒤의 선행 # 및 기타 주석 문자를 제거합니다.

답변3

을 실행 중인 경우 다음을 사용하여 명령을 실행할 zsh수 있습니다 .Ctrl-Qpush-line. 현재 입력을 스택에 저장하고 프롬프트를 지운 후 다음 명령을 입력한 후 스택을 팝합니다. 나는 당신이 묘사하는 상황을 해결하기 위해 이것을 사용해 왔습니다.

답변4

쉘이 다음으로 설정되어 있는 경우이맥스 모드(나는 bash가 일반적으로 기본값이라고 생각합니다):

#set -o | grep emacs
emacs         on

그런 다음 다음을 수행할 수 있습니다.

<Ctrl>a or <arrowkeys> # to go to the beginning of the current line or to wherever you want
<Ctrl>k    # to "kill" the content from the cursor position to the end of the line + SAVE it
... here you type the command you forgot to add ...
<Ctrl>y    # to "yank" the SAVED line into the current editing line. or <Ctrl>p in ksh(??)
<Enter>    # to execute it

#note: you can also replace: <Ctrl>a<Ctrl>k with: <Ctrl>u # kills the whole line + SAVE it

이것은 빨리 할 수 ​​있고 습관이 될 것입니다. ctrl-k를 사용하여 줄의 "끝"만 저장할 수도 있습니다(예: 나중에 재사용할 긴 인수 2개, 원할 때마다 "삭제"(+저장)한 다음 "복사"할 수 있습니다. 자주)

쉘이 있는 경우모드에서는 일반적인 vim 명령을 사용할 수 있습니다.

<Esc>      # to go back to normal(command) mode, if you were in editing mode
dd         # to delete the whole current line + SAVE it  (see note below)
i          # to reenter editing mode
... here you type the command(s) you forgot ...
<Esc>      # to return to normal mode
p          # to paste the buffered line + place the cursor on top of the last character
a          # to reenter editing mode past that current character
<Enter>    # to execute it

# note: instead of "dd" (kill whole line) you can simulate emacs <Ctrl>a<Ctrl>k with:
#    | or h or l  # to go to the 1st char of the line or wherever # simulates <Ctrl>a or <arrow keys>
#    d$  # to delete from the current position to the end of the line + SAVE it # <Ctrl>k

관련 정보