나는 Esc+ .가 당신에게 마지막 명령의 마지막 인수를 제공 한다는 것을 알고 있습니다.
그러나 나는 마지막 명령의 첫 번째 논쟁에 관심이 있습니다. 이를위한 키 바인딩이 있습니까?
같은 줄에 마지막 명령에서 n 번째 인수를 얻는 일반적인 방법이 있습니까? bash 스크립트 $0
에서는 $1
등을 사용할 수 있지만 명령 줄에서는 작동하지 않습니다.
또한 Esc+ 를 계속 눌러 마지막 인수로 할 수있는 것처럼 이전 명령의 0 번째 인수를 반복하면 .어떻습니까?
답변
것처럼 M-.
(메타 도트 또는 ESC 도트 Alt 키 도트)를 readline에 함수이며 yank-last-arg
, M-C-y
(메타 제어 Y 또는 ESC-CTRL-Y 또는 Ctrl + Alt + Y)을 readline에 함수이다 yank-nth-arg
. 을 지정하지 않으면 n
이전 명령의 첫 번째 인수를 취소합니다.
인수를 지정하려면 Esc 키와 숫자를 누르거나 Alt 키를 누른 상태에서 숫자를 누르십시오. 당신은 할 수 있습니다 Alt– -음수를 지정한 다음 Alt를 놓고 숫자를 누르십시오 (이것은 인수 목록의 끝에서 계산됩니다.
예:
다음 명령을 입력하십시오
$ echo a b c d e f g
a b c d e f g
이제 다음 프롬프트에서 echo
(다음 공백으로)를 입력 한 다음
보도 Alt– Ctrl– y당신은 지금 볼 수 있습니다 :
$ echo a
Enter아직 누르지 않고 다음을 수행하십시오.
보도 Alt– 3 Alt– Ctrl–y
보도 Alt– - 2 Alt– Ctrl–y
이제 당신은 볼 것이다 :
$ echo ace
그건 그렇고, echo
인수 0을 선택하여 줄에 넣을 수 있습니다 .
보도 Alt– 0 Alt– Ctrl–y
편집하다:
원본에 추가 한 질문에 대답하려면 :
당신은 누를 수 있습니다 Alt– 0다음 반복적으로 눌러 Alt– .단계를 이전 명령을 통해 (ARG 0)입니다. 마찬가지로 Alt– -다음 반복 Alt– .이전 다음 – 투 – 마지막으로 인수를 단계별로 허용합니다.
히스토리의 특정 라인에 적절한 인수가 없으면 벨이 울립니다.
자주 사용하는 특정 조합이 있으면 한 번의 키 입력으로 매크로를 정의 할 수 있습니다. 이 예는 눌러 이전 명령의 두 번째 인수를 기억한다 Alt– Shift– Y. 이 키 대신 원하는 키를 선택할 수 있습니다. 반복해서 누르면 이전 단계를 진행할 수 있습니다.
그것을 시도하려면 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의 답변이 너무 좋아서 더 많은 것을 배워야했습니다. 이 답변을 추가하면 다른 사람들이 매뉴얼 페이지 섹션을 찾고 Google에서 무엇을해야하는지 알 수 있습니다.
$ 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.
답변
! ^는 첫 번째 인수에 대한 명령 일 수 있습니다. 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
답변
우분투에서 테스트 18.04
이전 인수를 삽입하려면
- Alt+ .: 마지막 명령에서 마지막 인수를 삽입합니다.
- Alt+ #+ .: 마지막 명령에서 #n 번째 마지막 인수를 삽입합니다.
- Alt+ -, #, Alt+ ., zsh을 : Alt + -+ #+ .: 마지막 명령의 첫 번째 인수 #nth 삽입.
Linux에서는 명령을 반복하여 기록으로 돌아갈 수 있습니다
예:
마지막 명령은 :
mv foo bar
- Alt+ 0+ .: 마지막 명령의 첫 번째 인수 삽입 =
mv
- Alt+ 2+ .: 마지막 명령의 마지막 두 번째 인수 삽입 =
foo
- up, Ctrl+ w: 마지막 단어가없는 마지막 명령 =
mv foo
일반적인 지름길
- Ctrl+ w: 커서에서 마지막 단어를 제거합니다
- Alt+ d: 커서에서 다음 단어를 제거합니다
- Ctrl+ k: 커서 후 모든 것을 잘라냅니다
- Ctrl+ u, zsh : Alt + w: 커서 전에 모든 것을 잘라냅니다
- zsh : Ctrl + u: 전체 명령을 잘라냅니다 (bash에서는 Ctrl+ u, Ctrl+를 결합 할 수 있습니다 k)
- Ctrl+ y: 이전에 Ctrl+ u와 Ctrl+로 잘라낸 문자 붙여 넣기k
- Ctrl+ _: 마지막 편집 실행 취소 ( Ctrl+를 초과 할 때 매우 유용 w)
- Ctrl+ left: 마지막 단어로 이동
- Ctrl+ right: 다음 단어로 이동
- home또는 Ctrl+ a: 줄의 시작으로 이동
- end또는 Ctrl+ e: 줄의 끝으로 이동
이전 명령에서 인수를 반복하려면
zsh에서만 작동
이것을 실행하거나 ~/.zshrc
autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word
이제 Alt+ .를 사용 하여 원하는대로 되돌아 간 다음 Alt+ :를 사용하여 인수를 반복하십시오.
마지막 명령을 가정하면
echo 1 2 3 4 5
- Alt+ .:
5
- Alt+ .+ ::
4
- Alt+ .+ :+ ::
3
- Alt+ .+ :+ :+ ::
2
- Alt+ .+ :+ :+ :+ ::
1
- Alt+ .+ :+ :+ :+ :+ ::
echo
출처 : https://stackoverflow.com/a/34861762/3163120
사용 가능한 모든 바로 가기를 보려면
- 세게 때리다:
bind -lp
- zsh :
bindkey -L
나는이 요점에서 이것을 최신 상태로 유지하고있다 https://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)