programing

이전 명령의 인수를 사용하는 방법은 무엇입니까?

powerit 2023. 5. 8. 22:27
반응형

이전 명령의 인수를 사용하는 방법은 무엇입니까?

+는 마지막 명령의 마지막 인수를 제공합니다.

하지만 저는 마지막 명령의 첫 번째 주장에 관심이 있습니다.그렇게 하기 위한 키 바인딩이 있습니까?

마찬가지로, 마지막 명령에서 n번째 인수를 얻는 일반적인 방법이 있습니까?bash 스크립트에서 다음을 사용할 수 있습니다.$0,$1명령행에서는 작동하지 않습니다.

또한 +를 계속 눌러 마지막 인수로 할 수 있는 것처럼 이전 명령의 0번째 인수를 반복하는 것은 어떻습니까?

!$이전 명령줄 인수의 마지막 요소를 가져옵니다.

럼처입니다.M-. 또는 또는 줄 (sysc-dot 또 esc-dot 는 alt-dot)입니다.yank-last-arg,M-C-ymeta-control-y esc-control-y 줄 (syslog-control-y esc-control-y 또 ctrl-alt-y)입니다.yank-nth-arg 하지 않고n이전 명령의 첫 번째 인수를 당깁니다.

인수를 지정하려면 이스케이프와 숫자를 누르거나 Alt를 누른 상태에서 숫자를 누릅니다.수행- - 음수 지정을 시작한 다음 Alt를 해제하고 숫자를 누릅니다(이것은 인수 목록의 끝에서 계산됩니다).

예:

다음 명령 입력

$ echo a b c d e f g
a b c d e f g

다음 프롬프트에서 다음과 같이 입력합니다.echo공백이 ), 에 (으)ㄹ게요, ㄹ게요.

--를 Ctrly누르면 다음과 같은 내용이 표시됩니다.

$ echo a

아직 누르지 않고 다음을 수행합니다.

누름 -3 --Ctrly

누름 -- --AltCtrly

이제 다음과 같은 내용을 확인할 수 있습니다.

$ echo ace

그건 그렇고, 당신은 그것을 넣을 수 있었습니다.echo0 인수를 에서 다음을 수행합니다.

누름 -0 --Ctrly

편집:

원본에 추가한 질문에 답변하기

-0 를 누른 다음 - 를 .반복해서 누르면 이전 명령(arg 0)을 단계적으로 수행할 수 있습니다.마찬가지로 -- 반복 -. 이전의 마지막 다음 인수를 단계적으로 수행할 수 있습니다.

역사에서 특정 노선에 대한 적절한 주장이 없으면 벨이 울립니다.

자주 사용하는 특정 조합이 있는 경우 한 번의 키 입력으로 매크로를 수행하도록 매크로를 정의할 수 있습니다.이 예제에서는 --를 ShiftY눌러 이전 명령에서 두 번째 인수를 호출합니다. 이 키 입력 대신 원하는 키 입력을 선택할 수 있습니다.이 버튼을 반복적으로 눌러 이전 항목을 통과할 수 있습니다.

사용해 보려면 Bash 프롬프트에서 매크로를 입력합니다.

bind '"\eY": "\e2\e."'

이 을 이행을지로사다면추다행니가합을음에 합니다.~/.inputrc파일 이름:

"\eY": "\e2\e."

불행히도, 이것은 arg 0 또는 음수 인수 숫자에 대해 작동하지 않는 것 같습니다.

첫 번째 인수를 사용하려면 다음을 사용할 수 있습니다.!^또는!:1

예:

$ echo a b c d e 
a b c d e
$ echo !^
echo a
a

$ echo a b c d e 
a b c d e
$ echo !:1
echo a
a

다른 인수를 사용하는 것이 질문이므로 다음은 유용한 인수입니다.

!^      first argument
!$      last argument
!*      all arguments
!:2     second argument

!:2-3   second to third arguments
!:2-$   second to last arguments
!:2*    second to last arguments
!:2-    second to next to last arguments

!:0     the command
!!      repeat the previous line

처음 네 가지 형태가 더 자주 사용됩니다.!:2-마지막 인수가 포함되어 있지 않기 때문에 다소 반증적입니다.

저는 @larsmans 답변이 너무 좋아서 더 배워야 했습니다.이 답변을 추가하여 다른 사용자가 man 페이지 섹션을 찾고 구글에서 검색할 내용을 알 수 있도록 지원:

$ man  -P 'less -p ^HISTORY\ EXPANSION' 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.

Ubuntu 18.04에서 테스트됨


이전 인수 삽입하기

  • 마지막 명령의 마지막 인수를 Alt삽입합니다..
  • 마지막 명령의 #n번째 마지막 인수를 Alt삽입합니다#..
  • , , +,. zsh: +++:-#. 마지막 명령의 #n번째 첫 번째 인수를 삽입합니다Alt.-

Linux에서 명령을 반복하여 기록으로 돌아갈 수 있습니다.

예:

마지막 명령:

mv foo bar
  • Alt마지막0. 명령 =의 첫 번째 인수 삽입mv
  • Alt마지막2. 명령의 마지막 두 번째 인수 = 삽입foo
  • up +:Ctrlw 마지막 단어 =이 없는 마지막 명령mv foo

일반 바로 가기

  • Ctrl커서에서w 마지막 단어 제거
  • Alt커서에서d 다음 단어 제거
  • Ctrl커서k 뒤에 있는 모든 항목 잘라내기
  • Ctrlzshu: +:w 커서 앞에 있는 모든 항목을 잘라냅니다.
  • zsh: u+: 전체 명령을 자릅니다(바시에서는 +, k+를 u결합할 수 있습니다).
  • 이전에 + uk+로 잘라낸 문자 Ctrl붙여넣기y
  • Ctrl마지막_ 편집 실행 취소(+w를 초과할 때 매우 유용)
  • Ctrl마지막left 말로 옮기다
  • Ctrl다음right 단어로 이동
  • home 또는 +:a 줄의 시작으로 이동
  • end 또는 +:e 줄 끝으로 이동

이전 명령의 인수를 반복하는 방법

zsh에서만 작동합니다.

에 합니다.~/.zshrc

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word

이제 +를 .사용하여 원하는 만큼 돌아간 다음 +를 :사용하여 인수를 반복합니다.

마지막 명령을 다음과 같이 가정합니다.

echo 1 2 3 4 5
  • Alt+.:5
  • Alt+.+::4
  • Alt+.+:+::3
  • Alt+.+:+:+::2
  • Alt+.+:+:+:+::1
  • Alt+.+:+:+:+:+::echo

출처: https://stackoverflow.com/a/34861762/3163120

사용 가능한 모든 바로 가기를 보려면

  • bash: bind -lp
  • zsh: bindkey -L

최신 상태로 유지합니다. https://github.com/madacol/knowledge/blob/master/bash-zsh_TerminalShorcuts.md

첫 번째 인수에 대한 명령일 수 있습니다.n번째를 얻을 수 있는 방법이 있는지 확실하지 않습니다.

또한 기록에 있는 모든 명령에서 인수를 얻을 수 있습니다!


$ echo a b c d e f g
a b c d e f g
$ echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar
$ history | tail -5
  601  echo build/libs/jenkins-utils-all-0.1.jar
  602  history | tail -10
  603  echo a b c d e f g
  604  echo build/libs/jenkins-utils-all-0.1.jar
  605  history | tail -5
$ echo !-3:4
echo d
d
$ echo !604:1
echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar

첫 번째 매개 변수를 얻을 것이고,!$가 마지막 매개 변수를 얻을 것이며, !:n이 n번째 요소를 얻을 것입니다.

기본적으로 이전(명령의) 인수정렬하는 데 사용됩니다.

예를 들어, 다음 명령이 실행된 경우:

echo Hello, world how are you today?

그리고나서,Hello,첫 번째 주장이 될 것이고,today?여섯 번째는 마지막입니다. 즉, 다음을 입력하여 참조할 수 있습니다.

Alt+6 다음에


Ctrl 전통적으로 모자 문자로 표시됩니다.^키 이름 앞에 추가, 그리고M-그것은 메타 접두사입니다.

따라서 위의 바로 가기는 다음과 같이 재정의할 수 있습니다.^My잡아당기다


또한 명령줄에는 모자 대체 바로 가기가 있습니다.

echo Hello, world!

^Hello^Bye

Bye, world!

이전 명령의 첫 번째 일치 문자열을 대체합니다.

Hello, world! Hello, people!

^Hello^Bye

결과:

Bye, world! Hello, people!

두 번째 경기를 떠나는 것 (hello) 변경되지 않음.

참고: 모자 사이에 공백을 두지 마십시오. 그렇지 않으면 작업이 작동하지 않습니다.


위의 내용은 다음을 위한 바로 가기입니다.

!:s/Hello/Bye

event-level(") 이전 명령에서 처음 발견된(") 문자열에 대한 대체이며, 첫 번째 부분에는 다음과 같이 접두사를 붙입니다.g 스위치는 전체 라인적용됩니다.

echo Hello, world! Hello, people!

!:gs/Hello/Bye

Bye, world! Bye, people!

일반적으로 다음과 같은 다른 관련 명령에서 수행되는 것처럼sed,vi그리고.regex(정규 표현식) - 검색(문자열 일치)을 위한 표준 방식입니다.

아니요, 할 수 없습니다.!:sg/Hello/Bye또는!:s/Hello/Bye/g여기, 그것이 구문입니다!


  • 는 이벤트에 대한 것입니다. 이벤트는 명령 기록에서 수행된 명령 출력 또는 작업으로 이해될 수 있습니다.

매뉴얼 페이지, 블로그, 포럼 등 다양한 소스에서 읽은 내용을 직접 사용하고 직접 시도해보면서 이해했습니다.

그것이 신비로운 방식으로 빛을 비추기를 바랍니다.bash본 어게인의 껍데기sh셸(발명자의 성을 따서 본 셸이라고도 함)은 서버(서버 OS)를 포함한 많은 배포판에서 기본 셸입니다.

수락된 답변의 끝에 설명된 방법은 또한 저에게 0번째 인수와 함께 작동합니다.나는 이 대사들을 내 안에 가지고 있습니다.~/.inputrc:

"\en": "\e0\e."
"\em": "\e1\e."
"\e,": "\e2\e."

\e2\e.다보유보다 ▁over가 합니다.\e2\e\C-y이전 명령의 두 번째 인수를 여러 번 삽입하는 대신 반복적으로 누르면 이전 명령을 순환합니다.

명령어 하려면 이전명전를삽입면다음같과다입니력합이려하체를 입력하면 .!!\e^.\e^이라history-expand-line.

Mac에 있는 경우 Ctrl+문자가 포함된 확장 문자를 사용하는 경향이 있습니다.단말기(iTerm2)에 메타로 정의된 스페이스 바 옵션 키가 설정되어 있습니다.즉, 키를 사용하여 단어별로 탐색하고 이전 명령에서 매개 변수를 끌어옵니다.

첫 번째 인수를 붙여넣으려면 Alt 키를 누른 상태에서 '1' 키를 누른 다음 '.' 키를 누릅니다.

n번째 인수를 붙여넣을 경우 위의 '1' 키를 해당 숫자 키로 바꿉니다.

이것이 작동하지 않으면 터미널 에뮬레이터가 셸에 도달하기 전에 Alt 키를 잡을 수 있습니다.일부 터미널(xfce4-terminal)에서는 구성 파일에서 "Alt-" 단축키를 해제할 수 있습니다.

Jonas Eberle 덕분에, 저는 그의 논평에서 여기에 있는 다른 답변을 찾아냈습니다.

언급URL : https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command

반응형