이 단어를 어떻게 쓰는지 잘 모르겠지만 종종 다음과 같은 명령을 입력하는 경우가 많습니다.
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
일반적으로 경로를 두 번 입력하거나 (탭 완성) 경로를 복사하여 커서로 붙여 넣습니다. 입력하기 쉽도록 bashfoo가 있습니까?
이 단어를 어떻게 쓰는지 잘 모르겠지만 종종 다음과 같은 명령을 입력하는 경우가 많습니다.
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
일반적으로 경로를 두 번 입력하거나 (탭 완성) 경로를 복사하여 커서로 붙여 넣습니다. 입력하기 쉽도록 bashfoo가 있습니까?
답변:
많은 트릭이 있습니다 (내 생각에는 중복이 있음). 그러나 이것을 위해 나는 경향이 있습니다.
cp /etc/prog/dir1/myconfig.yml{,.bak}
그것은 당신의 명령으로 확장됩니다.
이를 중괄호 확장이라고 합니다. 여기에 사용 된 형식에서 {}
표현식은 쉼표로 구분 된 여러 문자열을 지정합니다. 이렇게하면 전체 /etc/prog/dir1/myconfig.yml{,.bak}
표현식 이 "확장"되어 {}
부분을 각 문자열로 바꿉니다 : 빈 문자열, giving /etc/prog/dir1/myconfig.yml
, 그리고 .bak
giving /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
히스토리 확장은 이런 종류의 작업에 유용 할 수 있습니다 (bash 히스토리가 사용 가능하다고 가정).
당신의 예에서, 당신은 할 수 있습니다 :
cp /etc/prog/dir1/myconfig.yml !#:1.bak
여기서,는 !#
현재의 라인을 지칭 !#:1
전류 선에 파라미터 1을 의미
하고 !#:1.bak
단부 상 '박'식은로 현재 라인에 1 파라미터를 지칭한다.
히스토리 지정자를 입력 한 경우 파일 이름을 다시 확인하거나 수정하려는 경우 Ctrl+ Alt+ E를 사용 하여 실제 값으로 확장 할 수 있습니다 .
bash 매뉴얼 페이지의 "History Expansion"섹션에 자세한 정보가 있습니다.
프로 고의 대답과 비슷하지만 다소 간단합니다. 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█
실제로 명령 줄에서 잘라 붙여 넣기 (emacs / bash 용어로 kill-yank)하여 편집 할 부분을 복제 할 수도 있습니다.
M-d
단어 경계까지 앞으로 죽이고 텍스트를 여러 번 죽일 수 있으며 모두 얀킹을 위해 하나의 '붙여 넣기'로 연결됩니다. 편리한!
by로 커서를 명령 행으로 되돌립니다 C-y
. 따라서 다음과 같은 줄이 있다면 (블록 요소 █은 커서 위치를 나타냅니다) :
$ cp avb.txt█ (M-b M-b)
$ cp█avb.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
에서 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
.
bash-fu
:)