bash 명령 줄을 효율적으로 이동하려면 어떻게해야합니까?


19

그래서 나는 up내 쉘 (주로 OSX 또는 Ubuntu의 Bash)을 사용하지만 때로는 커서의 현재 위치 다음에 물건 원한다는 것을 알고 있습니다. 위의 줄 을 완성 하는 방법이 있습니까? 친 up다음과 것은 left성가신입니다.

다른 트릭을 제외하고, 멋진 너무 것 tab, 그것은 우리 모두 지금에 대한 :)

다음은 예제입니다 (~ quack 요청 당).

입력 mkdir /where/the/hell/is/that/thing한 다음 동일한 디렉토리로 cd하고 싶습니다. 하지만 지금은 메타 -b에 대해 알고 있습니다 :)


1
명백한 예는 대단 할 것입니다.
quack quixote

@ ~ quack now example
Dan Rosenstark

1
여기에 관련 (중복) 문제는 아주 좋은 대답이야 : superuser.com/questions/124336/...
cregox

답변:


11

이 시도:

mkdir /where/the/hell/is/that/thing

그런 다음 alt+ 를 누르십시오.

OS 및 터미널에 따라 esc다음 을 입력해야 할 수도 있습니다 .

alt+ 1+ .를 눌러 특정 이전 인수를 선택할 수도 있습니다 .

이것보다 훨씬 낫다! 또는! $ 실제로 실행하려고하는 것을 볼 수 있기 때문에 어쨌든 키 입력이 줄어 듭니다.

편집 : 엄격하게 말하면 meta그렇지 않으므로 alt키보드 설정 방법에 따라 "windows"키와 함께 작동 할 수도 있습니다.


흥미로운! 그것에 대해 몰랐습니다.
quack quixote

2
@ justin 이것은 굉장합니다. OSX에서 메타는 이스케이프됩니다.
Dan Rosenstark

OS X 터미널의 @yar는 '설정'-> '키보드'에 '옵션을 메타 키로 사용'하기위한 환경 설정도 있습니다.
ThomasW

감사합니다 @ThomasW이 물건으로 돌아와야합니다. 나는 매일 커맨드 라인에 있지만 약간의 트릭을 사용합니다.
Dan Rosenstark

28

bash의 대화식 입력 메커니즘이므로 시스템의 man bash , 특히 Readline 섹션을 읽어야 합니다 . gnu.orgBash 매뉴얼에는 명령 줄 편집 에 대한 유용한 섹션이 있는데,이 부분 은 약간의 차이를 메우는 데 도움이됩니다.

기본적으로 이것들을 사용 하여 커맨드 라인 에서 이동할 수 있습니다 (여기에 몇 가지만 나열하십시오. 전체 목록에 대한 링크 참조).

  • Ctrl+ a줄의 시작 부분으로 이동합니다 (또는 Home터미널 설정에 따라 다름)
  • Ctrl+ e줄의 끝으로 이동 (또는 End...)
  • Meta+ f"단어"앞으로 이동
  • Meta+ b"단어"뒤로 이동

이것을 사용 하여 한 줄에서 텍스트"킬"(일명 "컷") 할 수 있습니다.

  • Ctrl+ k현재 커서 위치에서 줄 끝까지 텍스트를 죽입니다 ( "잘라 내기").
  • Ctrl+ y가장 최근에 죽인 텍스트를 커서의 버퍼로 다시 가져 오는 양키

따라서 이들을 결합하여 반복하려는 일부 명령 줄 청크를 선택하고 종료 한 후 다음 명령 끝에 붙여 넣을 수 있습니다.


이제 더 재미있게 만들기 위해 bash의 History Expansion을 고려하십시오 . 이것은이다 !!인 Studer의 대답은 언급 . 히스토리 확장은 이벤트 지정자 , 단어 지정자수정 자로 분류 됩니다.

이벤트 지정자는 다음과 같습니다 (다시 말하면 전체 목록에 대한 링크 참조).

  • ! -역사 대체를 시작합니다
  • !n- n 번째 배쉬의 기록 목록에서 명령, 어떤 정수 n은 (네거티브를위한 작품도)
  • !!-선행 명령; 에 해당!-1
  • !string- 문자열로 시작하는 가장 최근의 명령

단어 지정자는 이벤트에서 특정 부분을 선택합니다. :단어 지정자와 이벤트를 분리하는 데 사용하십시오 . 단어는 줄의 시작 부분부터 0부터 번호가 매겨지고 현재 줄에 공백으로 구분되어 삽입됩니다.

  • $-마지막 인수를 지정합니다 (예 : !!:$마지막 명령의 마지막 인수입니다. 단축 가능 !$)
  • n- 지정 n 번째 단어 (예 : !str:2로 시작하는 가장 최근 명령의 두 번째 인수 인 STR , !!:0명령 의 마지막 명령을)

따라서 예제에서 후속 조치를 취하기 위해 마지막 명령이 mkdir /some/really/long/path인 경우 실행 !!하면 해당 명령이 다시 실행 됩니다. 그러나 cd대신 그 길로 가고 싶습니다 .

$ cd !$

이제 다른 명령을 수행 한 다음 해당 경로를 다시 참조하려고한다고 가정하겠습니다. 이것이 마지막으로 실행 한 mkdir 명령 인 경우이를 사용하여 해당 경로를 반복 할 수 있습니다.

$ tar czf ~/foo.tgz !mkdir:$

이 키 (및 다른 Readline 명령)를 원하는 키 조합에 바인딩 할 수도 있습니다 . 바인딩 가능한 Readline 명령 : gnu.org/software/bash/manual/… 섹션 8.4, Readline Init 파일 섹션 : gnu.org/software/bash/manual/bashref.html#Readline-Init-File
quack quixote

정말 도움이됩니다. "설명서 읽기"가 예상되었지만 바인딩의 기본 이동을 언급하면 ​​도움이됩니다. ctrl-a를 아는 것조차도 실제로 절약 할 수 있습니다.
Dan Rosenstark

@quack, 문제는, 내가 :) 사실, 나중에 개정을 잡은 없습니다
댄 Rosenstark는

1
또한 현재 키 바인딩을 기록 bind -p하거나 bind -P인쇄합니다. 그것은 bash가 사용 하는 것에 대한 궁극적 인 참조입니다 .
quack quixote

1
나는이 해답이 커졌다 고 생각한다 : History Expansion에 관한 내용은 훌륭하다.
Dan Rosenstark

6

vi 사용자 인 경우을 입력하여 쉘을 vi 모드로 전환 할 수 있습니다 set -o vi.

그런 다음을 입력 한 후 명령 줄에서 모든 종류의 강력한 작업을 수행 할 수 있습니다 Esc + k.

내가 가장 많이 사용하는 것은 슬래시 Esc+K다음에 /입력 한 모든 텍스트가 명령 줄 기록을 검색하는 데 사용됩니다.

예를 들어 Esc + k /smbclient 입력 한 마지막 smbclient 명령을 제공합니다. 당신은 표준 VI 키를 사용하여 (모든 검색을 스크롤 할 수 jk위, 아래를위한 그러나 나는까지 생각하고 화살표도 작동합니다 아래).

또한 도움이 여기에 , 또한 더 당신이 찾고있는 수 있습니다 어떤 링크에서 일부 붙박이 bash는 일이 있습니다.

건배, 스투


vi 모드는 나에게 쓸모가 없지만 아직 vi로 올라 가지 않았기 때문에 잉크가 훌륭합니다. 고마워요!
Dan Rosenstark

1
vi 모드가없는 것은 ctrl-r입니다. 입력 한 다음 이전 명령의 일부입니다. 입력 된 마지막 항목이 나타납니다. ctrl-r을 다시 누르면 다음으로 이동합니다. 매우 편리합니다.
Nerdfest

3

!!마지막 명령을 나타내는를 사용할 수 있습니다 .

% 테스트
반향 %
> 테스트

흥미 롭군 그런 다음 ... 뭐?를 사용하여 해당 문자열을 조작하고 싶습니다.
Dan Rosenstark

이것은 bash의 히스토리 기능 중 일부입니다 : gnu.org/software/bash/manual/… .. 특히 히스토리 확장 : gnu.org/software/bash/manual/bashref.html#History-Interaction ... 참고 !!는 동의어입니다 대한 !-1: gnu.org/software/bash/manual/bashref.html#Event-Designators
돌팔이 의사 키호테

2
sudo를 사용하는 것을 잊었을 때 유용합니다. 즉 sudo !! -$ more / etc / sudoers / etc / sudoers : 권한 거부 $ sudo !! sudo more / etc / sudoers [sudo] 비밀번호 : .. : # / etc / sudoers ... ... ...
user9632

@ wookiebreath, 감사합니다, 지금이 답변에 투표하겠습니다
Dan Rosenstark

0

제시 한 예에서! $를 사용하여 이전 명령의 마지막 매개 변수를 나타냅니다.

mkdir / something / somethingelse

CD! $

번호가 매겨진 변형을 사용하여 이전 명령의 특정 매개 변수를 가져올 수도 있습니다.


0

최근 에이 readline cheat-sheet가 매우 유용하다는 것을 알았습니다 . 내가 몰랐던 많은 것들. 나는 !$Alt+를 알 때까지 항상 사용 했지만 .이제는 항상 사용합니다. :)

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