Ubuntu의 터미널에 명령을 저장하는 빠른 방법이 있는지 궁금합니다. 시나리오는 다음과 같습니다.
질문:
- [긴 명령어]를 입력하세요
- [긴 명령]을 실행하기 전에 [다른 명령]을 실행해야 한다는 것을 잊어버렸습니다.
#
명령어 를 그냥 앞에 붙여서 상하 키 히스토리에 넣는 것 보다 나중에 쉽게 사용할 수 있도록 명령어를 저장할 수 있었으면 좋겠습니다 . 레지스터나 클립보드에 직접 저장하는 것이 더 좋습니다.
나는 그것을 반향하고 싶지 않다는 것을 언급하는 것을 잊었습니다.
답변1
이건 네 것이 아니야단말기, 이것은 당신 것입니다껍데기.
찾고 있는 쉘 메커니즘의 이름은 다음과 같습니다.버퍼 종료. 사람들은 쉘 명령줄 편집기에 이러한 기능이 있다는 사실을 잊어버립니다. Bourne Again 쉘의 GNU Readline, (FreeBSD) Almquist 쉘의 libedit, Korn 쉘의 라인 편집기 및 TENEX C 쉘의 라인 편집기와 마찬가지로 Z 쉘의 ZLE에는 이러한 기능이 있습니다.
모드의 모든 쉘에서 emacs
저장하려는 행의 끝으로 이동하고 ⎈ Control+를 사용하여 종료 버퍼의 헤드까지 종료하고 U중간 명령을 입력 및 실행한 다음 ⎈ Control+를 사용하여 종료 버퍼 내용을 추출합니다. Y. 중간 명령을 입력할 때 종료 버퍼에 대한 작업이 수행되지 않도록 하십시오.
모드의 Z 셸에서는 접두사 시퀀스를 사용하여 줄이 종료될 명명된 스타일 버퍼를 지정할 vi
수 있습니다. 기본 버퍼 대신 다른 버퍼 중 하나를 사용할 수 있습니다. (모드에서 ) 와 같은 것을 사용하여 전체 라인을 버퍼 "a"로 삭제하고 중간 명령을 입력 및 실행한 다음 해당 버퍼의 내용을 .vi
vi
" a d dvicmd
" a p
해당 모드에서 vi
Korn 쉘의 GNU Readline, Bourne Again 쉘 및 (FreeBSD) Almquist 쉘의 libedit에는 명명된 vi
스타일 버퍼가 없고 단일 컷 버퍼만 있습니다. d d해당 버퍼의 행을 삭제하고 p버퍼 내용을 , 와 함께 넣으십시오. 그러나 vi
중간 명령을 입력할 때 Kill 및 Yanking과 동일한 스타일 버퍼를 사용합니다.
답변2
echo
I/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