커서 앞에 복사하고 붙여 넣을 Bash 명령?


24

이 단어를 어떻게 쓰는지 잘 모르겠지만 종종 다음과 같은 명령을 입력하는 경우가 많습니다.

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

일반적으로 경로를 두 번 입력하거나 (탭 완성) 경로를 복사하여 커서로 붙여 넣습니다. 입력하기 쉽도록 bashfoo가 있습니까?


2
내 생각 엔 bash-fu:)
cat

답변:


43

많은 트릭이 있습니다 (내 생각에는 중복이 있음). 그러나 이것을 위해 나는 경향이 있습니다.

cp /etc/prog/dir1/myconfig.yml{,.bak}

그것은 당신의 명령으로 확장됩니다.

이를 중괄호 확장이라고 합니다. 여기에 사용 된 형식에서 {}표현식은 쉼표로 구분 된 여러 문자열을 지정합니다. 이렇게하면 전체 /etc/prog/dir1/myconfig.yml{,.bak}표현식 이 "확장"되어 {}부분을 ​​각 문자열로 바꿉니다 : 빈 문자열, giving /etc/prog/dir1/myconfig.yml, 그리고 .bakgiving /etc/prog/dir1/myconfig.yml.bak. 결과는

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

이 표현식은 중첩 될 수 있습니다.

echo a{b,c,d{e,f,g}}

생산

ab ac ade adf adg

숫자를 사용하여 시퀀스를 생성하는 변형이 있습니다.

echo {1..10}

생산

1 2 3 4 5 6 7 8 9 10

단계를 지정할 수도 있습니다.

echo {0..10..5}

생산

0 5 10

망할 그 달콤한. 나는 내가 처음으로 물어 보는 것이 아니라 어색한 까다로운 질문이라고 생각했다.
user1028270

쉼표는 무엇을합니까?
user1028270

5
설명서의 브레이스 확장 을 참조하십시오. 확장 에 사용 된 값을 구분합니다. 여기서 두 값은 빈 문자열과 .bak입니다.
Stephen Kitt

12

히스토리 확장은 이런 종류의 작업에 유용 할 수 있습니다 (bash 히스토리가 사용 가능하다고 가정).

당신의 예에서, 당신은 할 수 있습니다 :

cp /etc/prog/dir1/myconfig.yml !#:1.bak

여기서,는 !#현재의 라인을 지칭 !#:1전류 선에 파라미터 1을 의미
하고 !#:1.bak단부 상 '박'식은로 현재 라인에 1 파라미터를 지칭한다.

히스토리 지정자를 입력 한 경우 파일 이름을 다시 확인하거나 수정하려는 경우 Ctrl+ Alt+ E를 사용 하여 실제 값으로 확장 할 수 있습니다 .

bash 매뉴얼 페이지의 "History Expansion"섹션에 자세한 정보가 있습니다.


8

프로 고의 대답과 비슷하지만 다소 간단합니다. C-w커서 왼쪽에있는 단어를 잘라 내고 ( "킬") C-y다시 삽입합니다 ( "잉크").

$ cp /etc/dir1/myconfig.yml                              (C-w)
$ cp                                                     (C-y)
$ cp /etc/dir1/myconfig.yml                              (space, C-y)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml       (finish text)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml.bak

2
또한 파일 이름에 공백이있는 경우 행에 여러 단어를 사용 하여이 작업을 수행 할 수 있으며 Cy는 커서를 움직이거나 그 사이에 다른 것을 입력하지 않는 한 모든 단어를 붙여 넣습니다. 단일 문자 삭제 (예 : backspace / del / ctrl-d)를 제외한 모든 삭제 명령을 함께 사용할 수 있습니다.
Random832

6

실제로 명령 줄에서 잘라 붙여 넣기 (emacs / bash 용어로 kill-yank)하여 편집 할 부분을 복제 할 수도 있습니다.

M-d단어 경계까지 앞으로 죽이고 텍스트를 여러 번 죽일 수 있으며 모두 얀킹을 위해 하나의 '붙여 넣기'로 연결됩니다. 편리한!

by로 커서를 명령 행으로 되돌립니다 C-y. 따라서 다음과 같은 줄이 있다면 (블록 요소 █은 커서 위치를 나타냅니다) :

$ cp avb.txt                 (M-b M-b)
$ cpavb.txt                  (M-d) kill the word 'avb'
$ cp █.txt                    (C-y) yank it back
$ cp avb█.txt                 (C-e) to the end of line
$ cp avb.txt                 (C-y) yank it again
$ cp avb.txt avb             finish the line
$ cp avb.txt avb.foo

대화식 키 부서에서 bash가 제공하는 것에 익숙해지면 도움이 될 것입니다. http://web.mit.edu/gnu/doc/html/features_7.html


6

에서 tcsh또는 zsh, Alt+Ctrl+_emacs모드 ( copy-prev-word위젯) 때문에, 마지막 단어를 삽입

cp 매우 긴 경로 Alt+Ctrl+_.back

bash있다 copy-backward-word(안 기본적으로 어떤 키에 바인딩) 위젯하지만, 링 버퍼 만 복사 단어를, 당신은 또한 언론에 필요한 것 Ctrl-Y(에서 emacs그것을 꺼낼 모드). 그러나 당신은 할 수 있습니다 :

bind '"\e[cpw~": copy-backward-word'
bind '"\e\C-_": "\e[cpw~\C-Y"'

이하려면 Alt+Ctrl+_처럼 / 홱 당김을 모두 복사 / snarf을하고 붙여 넣기 tcsh/ zsh.

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