bash 콘솔에서 현재 입력 한 매개 변수를 반복하는 방법은 무엇입니까?


23

방금 다음 줄을 따라 무언가를 입력하고있었습니다.

mv foo/bar/poit/zoid/narf.txt

갑자기 깨달았어요, 저 매개 변수의 큰 부분을 다시 입력해야합니다

mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt

tabcompletion에도 불구하고 상당히 아 pain니다. 텍스트와 middleclick을 마우스로 선택하여 매개 변수를 붙여 넣을 수는 있지만 충분하지 않습니다. 나는 키보드에 남아 있고 싶다.

키보드를 사용하여 줄의 현재 매개 변수를 복사하여 붙여 넣는 방법이 있습니까?


3
내 조언은 귀하의 질문에 대답하지 않지만 작은 팁입니다. 귀하의 예에서와 같이 다음 구성을 사용할 수 있습니다. mv foo/bar/poit/zoid/{narf.txt,troz.txt}대신 긴 주소를 두 번 입력하거나 복사하여 붙여 넣습니다.
돌진

2
@Rush의 솔루션보다 약간 짧습니다 : mv foo/bar/poit/zoid/{narf,troz}.txt. 이것은 우리가 같은 경우 특히 잘 작동.../zoid/this_source_file_has_to_be_patched.c{,.orig}
안스 Esztermann

@Rush 답으로 지적 하시겠습니까? 그것은 내가 직접 요구 한 것이 아닐 수도 있지만, 다시 말하지만, 당신의 해결책은 내가 원하는 것보다 훨씬 더 중요합니다. 수용 토큰이 필요합니다.
k0pernikus 2016

답변:


15

미리 계획 한 경우 괄호 확장을 사용 합니다. 이 경우 :

mv foo/bar/poit/zoid/{narf,troz}.txt

기본 readline단축키를 사용하는 또 다른 방법은 다음과 같습니다 .

  • mv foo/bar/poit/soid/narf.txt: 시작
  • Ctrl- w: unix-word-rubout삭제foo/bar/poit/soid/narf.txt
  • Ctrl- y, Space, Ctrl- y: yank, 공간, yank다시 얻을 수 있습니다mv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
  • Meta- backspace, Meta- backspace: backward-kill-word마지막 두 번 삭제narf.txt
  • troz.txt: 다른 꼬리 부분을 입력하십시오

bash쉘을 사용하여 사소하지 않은 시간을 보낸 다면 주기적으로 기본 단축키 목록을 읽고 일상적으로 배우고 통합하는 데 유용한 몇 가지를 선택하는 것이 좋습니다. 매뉴얼의 8 장bash 을 시작하는 것이 좋습니다. 지름길을 알면 실제로 효율성을 높일 수 있습니다.


산뜻한! 필자의 경우 Meta + Backspace 대신 Alt + Backspace를 눌러야했습니다.
k0pernikus 2016 년

3
@ k0pernikus 대부분의 키보드에서 Alt 키는 메타 키입니다.
jw013

1
다시 입력을 저장하려면 .txtCtrl + 왼쪽 (또는 호출하는 다른 바로 가기 backward-word)을 누른 다음 한 문자를 왼쪽으로 누른 다음 Alt + 백 스페이스를 누르고를 입력하면 troz됩니다.
wjandrea

24

히스토리 확장은 실제로 이벤트 지정자를 사용하여 현재 명령에서도 작동합니다 !#. $방금 입력 한 매개 변수를 얻으려면 마지막 인수--에 단어 지정자와 이것을 결합하십시오 . 그리고 그 위에 모든 일반 수정자를 사용할 수 있습니다. 예를 들어, 멀리 떨어진 디렉토리에서 파일 이름을 바꾸는 경우 다음과 같이 입력하면됩니다.

mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname

매우 유용한! magic-space히스토리 확장을 자동으로 확장하기 위해 inputrc 의 bash 옵션 과 특히 잘 작동합니다 . (일반적으로 더 유용하기 때문에 ^ W를 슬래시로 나누도록 설정했기 때문에 최상위 투표 답변을 사용할 수 없습니다.)
Soren Bjornstad

@SorenBjornstad는 alt+backspace일반적으로 슬래시와 같은 단어 구분 기호에서 이미 중지되므로 ^W해당 기능을 얻는 방법 을 변경할 필요가 없으므로 단어 이외의 문자 나 공백으로 구분 된 단어를 모두 삭제할 수 있습니다.
Eric Renouf

14

귀하의 예에서와 같이 다음 구성을 사용할 수 있습니다.

mv foo/bar/poit/zoid/{narf.txt,troz.txt}

또는 심지어 ( Ansgar Esztermann 제안 ) :

mv foo/bar/poit/zoid/{narf,troz}.txt

대신 긴 주소를 두 번 입력 / 복사 붙여 넣지 마십시오.


2
이를 중괄호 확장 이라고 합니다.
CodeGnome

6

놀기 나는 이것을 작동 시켰습니다.

mv foo/bar/poit/zoid/narf.txt

히트 Enter
마지막 매개 변수를 저장하려면 .

이제 마지막 줄을 다시 입력하십시오. 공백을 입력하고 마지막으로 사용한 매개 변수 사용을 얻으십시오.

Alt + .

오류를 유발하는 것을 싫어하지만이 사용 사례에서 작업을 수행합니다.


멋진 또 다른 팁이 배웠습니다!
Bram

<kbd> Esc </ kbd> + <kbd>. </ kbd>는 <kbd> Alt </ kbd> + <kbd>. </ kbd>와 같습니다.
Nikos Alexandris

2

변수를 쉽게 사용할 수 있습니다.

a=test.csv ; cp $a $a.bak

또는 당신의 경우 (주 탭의 경쟁이 작동 부분) :

a=foo/bar/poit/zoid/ ; mv ${a}narf.txt ${a}troz.txt

2

나는 이것을 내 안에있다 ~/.inputrc:

"\ej":"!#:$\e^"

!#현재 줄이고 :$마지막 단어이며 \e^입니다 history-expand-line.


이것은 답변으로 표시되어야합니다. 'alt / option + j'를 누르면 마지막 단어가 복사됩니다.
mpprdev

2

zsh대해 다음 키 바인딩이 도움이된다고 생각합니다.

# Bind alt-m to insert previous word from the current line
bindkey '^[m' copy-prev-shell-word

# Bind alt-k to kill word before cursor in vi-style
bindkey '^[k' vi-backward-kill-word

나는 명중 그래서 Alt- M다음 마지막 인수를 반복합니다 Alt-K 나는 경로의 끝에 떨어져 부분을 삭제하려면.

다음 은 매핑 할 수있는 일부 동작에 대한 유용한 참조 입니다.


2

짧은 대화식 2 단계 솔루션

  1. 유형: echo foo/bar/poit/zoid/narf.txt

    이것은 bash foo/bar/poit/zoid/narf.txt에서 Alt- .바로 가기에 사용할 수 있습니다 .

  2. 입력 mv및 히트 Alt- ., Space,Alt -.

    당신은 얻을 것이다 mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt. 이제 마지막 단어를 쉽게 수정할 수 있습니다.

자정 사령관

매우 유용한 도구는 콘솔에서 실행되는 파일 관리자입니다. 파일 이름과 디렉토리 경로를 대화식으로 명령 행에 복사 할 수 있습니다. Midnight Commander는 서로 다른 디렉토리의 내용을 나열하는 2 개의 패널 (왼쪽 및 오른쪽)을 표시합니다.

간단한 안내 :

  • Up/ Down화살표 키는 현재 패널에서 파일을 선택합니다.
  • Tab 왼쪽과 오른쪽 패널 사이를 전환합니다.
  • Ctrl- Shift-Enter 사본 (전체 경로 포함) 명령 행에 현재 선택된 파일
  • Alt-o 다른 패널에서 현재 선택된 디렉토리를 엽니 다
  • Ctrl-o 콘솔을 전체 화면으로 볼 수 있습니다
  • Ctrl- x,p 활성 패널의 경로를 콘솔로 복사
  • Ctrl- x, Ctrl-p 비활성 패널의 경로를 콘솔에 복사
  • Esc- Tab자동 완성입니다

이것은 내가 지금까지 찾은 가장 빠른 방법입니다-바로 가기에 익숙해 진 후.


0

{,} "복제기"에서 같은 것을 사용하십시오. 즉 :

git tag -m {v,v}1.0.1

# same as 

git tag -m v1.0.1 v1.0.1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.