Bash에는 마지막 명령의 일부를 반복하는 편리한 연산자가 있습니다.
-
!^
이전 명령의 첫 번째 인수로 확장합니다. 예 :$ echo one "two three" one two three $ echo !^ echo one one
-
!$
이전 명령의 마지막 인수로 확장합니다. 예 :$ echo one "two three" one two three $ echo !$ echo "two three" two three
-
!*
이전 명령의 모든 인수로 확장됩니다. 예 :$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(지금까지 내가 이해, 이들에 대한 문법 설탕 있습니다 !!:^
, !!:$
그리고 !!:*
각각 어디에 !!
이벤트 지정자 이전 명령으로 확장하고 있다는 것입니다 ^
, $
그리고 *
단어 지정자이다는 볼 배쉬 참조 설명서 또는 man bash
.)
이것들은 종종 매우 편리합니다. 그러나 키보드 단축키로 훨씬 더 시원해집니다.
-
당신이 공격 할 때 Alt+ .또는 Alt+를 _, 이전 명령의 마지막 인수는이 쓴 유사 것처럼, 현재의 명령에 삽입되어
!$
그 시점에서. -
그 시점에서 작성한 것처럼 Alt+ Ctrl+ y를 눌러 이전 명령의 첫 번째 인수를 삽입 할 수도 있습니다
!^
.
합니다 (참조 GNU의 Readline 라이브러리 또는 info readline
.)
실제로 명령을 실행하기 전에 삽입하는 내용을 볼 수 있기 때문에 Bash의 기록 연산자보다 키보드 단축키를 선호합니다. 그러나 이전 명령의 모든 단어, 즉 !*
작업 하는 단어를 모두 삽입 할 수있는 바로 가기가없는 것 같습니다 . 적어도 나는 그것을 찾을 수 없었다.
그런 지름길이 있습니까? 그렇지 않은 경우 readline 라이브러리를 구성하여 라이브러리를 추가 할 수 있습니까?
답변
다음 명령의 출력을 보면 :
bind -l
또는 더 나은 :
bind -l | grep arg
예를 들어, yank-last-arg
마지막 인수와 같은 모든 인수에 대해 readline 함수가 존재하지 않는 것을 알 수 있습니다. 마지막 인수는 이전 명령 (이전 기록 항목의 마지막 단어)에 마지막 인수를 삽입 할 수 있습니다. 따라서 그러한 기능이 존재하지 않는다면 원하는 것을 달성하기위한 지름길이 없을 것입니다.
귀하의 요청에 접근 한 상자를 만들어 보도록하겠습니다 …
먼저 다음 명령의 출력을 살펴보십시오.
bind -p | grep yank-nth-arg
출력은 다음과 같습니다.
"\e\C-y": yank-nth-arg
다음과 같이 번역 할 수 있습니다. yank-nth-arg
(이전 명령에 첫 번째 인수 삽입-인수 n을 사용하여 이전 명령의 n 번째 인수 삽입)은 Alt+ Ctrl+에 바인딩됩니다 y.
같은 방법으로 bind -p
명령 출력의 모든 행을 해석 할 수 있습니다 .
이제 다음 시나리오에서주의하십시오.
-
다음 바인딩을 설정 한 경우 :
bind '"\ea": "\e2\e."'
Alt+ A는 Alt+ 2Alt+ .에 매핑되고 이전 명령의 두 번째 인수를 삽입하도록 매핑됩니다. 따라서 Alt+ 를 누르면 이전 명령 A의 두 번째 인수가 현재 명령에 삽입됩니다.
-
설정 한 경우 :
bind '"\ea": "\e1\e. \e2\e."'
Alt+ 를 누르면 이전 명령 A의 처음 두 인수가 현재 명령에 삽입됩니다. 이전 명령의 인수 수가 최대 2 인 경우 물론 이전 명령이 모두 현재 명령에 삽입됩니다.
-
설정 한 경우 :
bind '"\ea": "\e1\e. \e2\e. \e3\e."'
Alt+ 를 누르면 이전 명령 A의 처음 세 인수가 현재 명령에 삽입됩니다. 이전 명령의 인수 수가 최대 3 인 경우 (이 경우처럼) 물론 이전 명령이 모두 현재 명령에 삽입됩니다.
-
등등.
처음 10 개의 인수에는 다음을 사용할 수 있습니다.
bind '"\ea": "\e1\e. \e2\e. \e3\e. \e4\e. \e5\e. \e6\e. \e7\e. \e8\e. \e9\e. \e1\e0\e."'
그리고 나는 너무 많은 인수로 너무 자주 명령을 사용하지 않는 한 이것이 충분하다고 생각합니다.
지속적으로 유지하려면 ~/.inputrc
파일에 다음 줄을 추가 하십시오.
"\ea": "\e1\e. \e2\e. \e3\e. \e4\e. \e5\e. \e6\e. \e7\e. \e8\e. \e9\e. \e1\e0\e."
이 예에서는 이전 명령의 모든 인수 (인수가 10보다 크지 않은 경우)를 삽입하기 위해 Alt+ A를 선택 했지만 이전 명령에서 \ea
문자열 을 바꾸어 다른 조합을 선택할 수 있습니다 .
자원:
- 히스토리 조작을위한 명령
help -m bind
- BASH-이전 명령의 인수를 사용하는 방법?