추가된 매개변수로 명령을 반복하는 방법

추가된 매개변수로 명령을 반복하는 방법

다음과 같이 명령을 반복하고 명령 뒤에 텍스트를 추가하는 방법을 알고 있습니다 !!.

ls -l
!! tmp

두 번째 줄은 로 확장됩니다 ls -l tmp.

하지만 단어 사이에 명령에 매개변수를 추가하려면 어떻게 해야 할까요? 예를 들어, 다음을 수행했다면:

ls tmp

-l...그런 다음 전체 내용을 다시 입력하거나 위쪽 화살표 키를 누르고 화살표 키를 사용하여 커서를 올바른 위치로 설정하지 않고 명령에 매개변수를 추가하고 싶은 경우가 많습니다 . 무효가 !! -l되기 때문에 작동하지 않습니다 ls tmp -l. (실제로 여기서 사용한 간단한 예제보다 명령이 훨씬 깁니다.)

즉, ?? -lwhere가 ??이전 명령을 반복하지만 -l첫 번째 단어와 두 번째 단어 사이에 추가하는 것과 같은 것을 찾고 있습니다.


명확성을 위해 ls -l tmp이는 단지 단순화된 예일 뿐입니다. 실제 사용 사례는 유사한 상황에 더 가깝습니다 /very/long/path/to/very-long-command --with=a --very=long --parameter=list.

답변1

!!:0은 이전 명령의 0번째 단어로, !!:*0번째 단어를 제외한 모든 단어입니다.

!!:0 -l !!:*

당신이 찾고있는 명령입니다.

원천https://www.gnu.org/software/bash/manual/bash.html#Word-Designators

답변2

당신은 할 수 있습니다:

$ ls -l
[..]
$ !:0* /tmp
[..]

그러면 맨 페이지를 ls -l /tmp참조 하십시오.bash

   Word Designators
       Word designators are used to select desired words from the event.  A : separates the 
       event specification from the  word  designator.   It  may  be  omitted  if the word
       designator begins with a ^, $, *, -, or %.  Words are numbered from the beginning of
       the line, with the first word being denoted by 0 (zero).  Words are inserted into the
       current line separated by single spaces.

       0 (zero)
              The zeroth word.  For the shell, this is the command word.
       n      The nth word.
       ^      The first argument.  That is, word 1.
       $      The last argument.
       %      The word matched by the most recent `?string?' search.
       x-y    A range of words; `-y' abbreviates `0-y'.
       *      All of the words but the zeroth.  This is a synonym for `1-$'.  It is not an 
              error to use * if there is just one  word  in
              the event; the empty string is returned in that case.
       x*     Abbreviates x-$.
       x-     Abbreviates x-$ like x*, but omits the last word.

       If a word designator is supplied without an event specification, the previous command
       is used as the event.

답변3

Bash를 사용하면 프롬프트에서 기록에서 명령을 빠르게 검색하고 반환할 수 있으므로 실행하기 전에 수동으로 편집할 수 있습니다.

프롬프트에 따르면:

  1. ~에 따르면Ctrl-R(그림오른쪽반전): 현재 반전 모드에 있음을 알리기 위해 프롬프트가 변경되어야 합니다.
  2. 명령의 아무 부분이나 입력하기 시작합니다(예: , 또는 match 를 입력할 수도 있음 ls) tmp. mp입력 ls tmp할 때 키 입력과 일치하는 마지막 명령이 표시됩니다.
  3. 명령을 찾으면 tab일반 프롬프트에 해당 명령을 입력하기만 하면 됩니다. 아직 실행되지는 않고 여기서 매개변수 추가, 삭제 또는 변경이나 다른 명령 적용과 같은 수정 사항을 기다리고 있을 것입니다. 같은 파일이 기다려요

답변4

이전 명령을 시작하고 명령 이름 바로 뒤에 옵션을 추가하려면 다음 키를 누르십시오.
Up Home Ctrl+ Right Space(옵션 입력)Enter

커서 키가 시스템에서 작동하지 않으면 Emacs 동작 키를 대신 사용할 수 있습니다.
Ctrl+ P Ctrl+ A Meta+ F Space(입력 옵션)Enter

명령 이름에 두 개 이상의 단어가 있는 경우(예: 슬래시가 있는 경로인 경우) Ctrl+는 Right첫 번째 슬래시를 지나서만 이동합니다. 대신 첫 번째 공백을 검색합니다.

Up Home Ctrl+ S Space Esc Space(입력 옵션) Enter
Ctrl+ P Ctrl+ A Ctrl+ S Space Esc Space(입력 옵션)Enter

이 검색을 사용하면 ++ 대신 Up Up, Up Home또는 Ctrl++ 대신 으로 시작할 수 있습니다. 키 입력 횟수는 동일하지만 입력이 약간 더 쉽지만 직관적이지는 않습니다.P CtrlPCtrlP CtrlA

원한다면 사용할 수 있습니다역사적인 대체 시설, 명령에 슬래시가 포함되어 있으면 키 입력 횟수가 줄어듭니다.
^ ^ --option 
옵션 뒤의 공백에 유의하십시오. 명령의 첫 번째 공백을 공백, 새 옵션 및 다른 공백으로 바꿉니다.

관련 정보