자주 사용하는 명령 줄 명령에 대한 자동 완성?


15

일부 프로젝트의 경우 종종 다음과 같은 몇 가지 명령을 입력합니다.

cd an/extremely/long/path/in/which/I/have/some/kinda/project

./runmyproject --with some --command line --options set

내가 게으르다는 것을 알면서 나는 그 명령을 계속해서 반복해서 입력하지 않도록 노력합니다. 따라서 물론 업 키를 사용하여 해당 명령을 다시 찾을 수 있지만 종종 입력하는 것보다 더 많은 시간이 걸리는 명령이 너무 많습니다.

나는 아직 모든 것을 입력하지 않았을 때 많이 사용하는 전체 명령을 제안 할 수있는 유틸리티가 있는지 궁금합니다. 예를 들어 'cd an /'을 입력하고 지난 달에 많이 사용했기 때문에 이미 나머지 경로를 제안합니다.

Bash Smart Complete라는 것을 발견했습니다. 그러나 그것은 내가 전에 사용한 명령을 보지 않는다는 점에서 약간 "멍청한"것입니다. 방금 이 SO answer을 찾았 습니다.이 명령은 파일에 많이 사용하는 명령을 넣는 것을 제안합니다. 그러나 새 프로젝트를 시작하거나 폴더 또는 프로그램 인수를 변경할 때마다 새 파일을 작성해야한다는 점에서 반응이 충분하지 않습니다.

아무도 다른 유틸리티 또는 이것을 달성하는 다른 방법을 알고 있습니까? 아니면 누구든지 내가 지난 달에 사용한 명령을보고 지난 달에 가장 많이 사용 된 명령을 완료 할 수 있도록 Bash Smart Complete를 변경하는 방법을 알고 있습니까?

[편집] 아래는 정말 훌륭한 답변입니다. 나는 아직 명확한 답변으로 표시했습니다. 나는 대답을 좋아하지 않기 때문에가 아니라 절대적인 승자가 아닙니다. 나는 마지막 학기가 훌륭한 프로젝트라고 생각합니다. 불행히도 여전히 가장자리 주위가 다소 거칠습니다. 예를 들어; 아직 복사 붙여 넣기를 지원하지 않습니다. 그래도 성숙 해지면 훌륭한 터미널 앱이 될 것이기 때문에 그 프로젝트를 계속 지켜봐야합니다. 다른 답변들도; 그들은 별명을 만들 것을 제안했습니다.이 작업은 작업을 제거하는 대신 추가 작업을 생성하거나 Ctrl + R을 사용하기 때문에 추가 작업을 생성하기 때문에 원하지 않습니다 (알지 못했습니다!). 두 사람이 Ctrl + R 사용을 제안했기 때문에 한 답변을 다른 답변보다 강조 할 수는 없습니다.

그래서 지금은 Ctrl + R을 사용하고 있으며 앞으로는 Finalterm을 사용할 수 있습니다.

모든 훌륭한 답변을 주셔서 감사합니다!


2
당신은 정말로 시도해야합니다 zsh. 그것은 당신이 요구하는 모든 것을 제공합니다. bash가 zsh을로 이동
바샤 라트 Sialvi

BASH 매뉴얼 페이지에 따르면이 기능은 BASH에도 "dynamic-complete-history"로 존재합니다. 기본적으로 Alt + Tab에 바인딩되어있어 쓸모가 없지만 "bind"로 바인딩을 변경할 수 있습니다.
Boris Bukh 2016 년

1
zsh가 이것을 돕기 위해 구체적으로 무엇을합니까?
poolie

답변:


16

명령이 자주 사용되면의 명령 기록 bash 트랙에 기록됩니다 .bash_history.

이제 요령 : CTRL-r 을 눌러이 히스토리를 역으로 검색하여 명령을 다시 실행할 수 있습니다 .

역 이력 검색 모드에서 bash는 입력 할 때 주어진 입력으로 시작하는 가장 최근의 명령 을 입력 할 때 실시간으로 표시합니다 . 그런 다음 enter를 눌러 제안 된 명령을 승인하고 실행하십시오. CTRL-R을 계속 눌러 동일한 접두사를 가진 이전 명령으로 순환하십시오.

이것은 bash에 내장되어 있으므로 스크립트를 사용자 정의하거나 소프트웨어를 설치할 필요가 없습니다. :) bash의 가장 유용한 기능 중 하나 인 imho입니다.


3
명령을 실행하지 않은 경우 (예 : 필요한 명령을 찾지 못한 경우) [ CTRL-g ]를 사용 하여 내역 검색 모드에서 빠져 나옵니다.
MountainX-for-Monica

8

다음을 터미널 화면에 붙여 넣습니다 (Ctrl-Shift-V).

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

터미널 화면을 종료 (Ctrl-D) 한 다음 터미널을 다시 엽니 다.

이제 첫 두 문자 만 입력 한 다음 위 또는 아래를 눌러 필터링 된 목록을 스크롤 할 수 있습니다.


3
이 작업을 수행하는 가장 간단한 답변입니다!
cxrodgers 2016 년

8

마지막 학기

이 매우 유망한 터미널 앱은 최종 학기 라고 부릅니다 . 많은 기능들 중에서도 리메 버링 명령 이력이있어 선택할 수 있습니다. 더 많은 기능은 다음과 같습니다.

마지막 학기

기사 에서 자세한 내용을 읽을 수 있습니다 .

다음은 제작자의 웹 사이트입니다. http://finalterm.org/

설치하려면

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

경고

나는 그것이 유망하다고 말했다. 유일한 문제는 버전이 0.1이라는 것입니다. 따라서 일부는 좋아 vim하고 nano아직 제대로 작동하지 않습니다. 또한 끌어서 놓기, 복사 및 붙여 넣기를 아직 지원하지 않습니다. 그러나 요청한 기능이 있습니다. 소프트웨어가 발전함에 따라 소프트웨어는 데스크탑에 가장 적합한 터미널 중 하나가됩니다.

스크린 샷

작동하는 기능은 다음과 같습니다.

 작동중인 기능

도움이 되었기를 바랍니다.

* 나는 Saucy에 있으므로 Salamander 배경이있는 이유입니다. :)


팁 고마워! 나는 마지막 학기를 체크 아웃하고 좋아 보인다. 불행히도 아직 복사 붙여 넣기를 지원하지 않는 것 같습니다. Ctrl + V, Ctrl + Shift + V를 마우스 오른쪽 버튼으로 클릭했지만 아무것도 작동하지 않는 것 같습니다. 앞으로이 점을 명심하겠습니다.
kramer65

그것이 내가 본 가장 큰 단점입니다. 그러나 프로젝트는 젊으므로 곧 추가 될 수 있기를 바랍니다. 복사-붙여 넣기가 지원되지 않는 터미널 앱을 볼 수 있습니다.
Max Tither

7

alias전체 명령에 대해를 사용 하거나에 디렉토리를 추가하십시오 $PATH. 또한 실행 파일 (또는 스크립트 등)을 실행할 위치로 디렉토리를 변경할 필요가 없으므로 매우 간단합니다. 두 방법 모두 변경 사항을 적용하기 전에 사용중인 터미널을 다시 시작해야합니다.

bash alias예제 를 작성하는 방법 은 다음과 같습니다 ( ~/.bashrc파일에 다음 줄 추가 ).

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

이 방법으로 runmyproject옵션 / 인자를 지정하지 않고도 어디서나 터미널에 입력 할 수 있습니다.

또는 프로젝트 경로를 $PATH환경 변수에 추가 할 수 있습니다 . 이렇게하려면 ~/.bashrc파일에 다음 줄을 추가 하십시오.

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

이 경우 실행 파일을 실행할 때 옵션 / 인수를 지정해야합니다.


1
문제는 터미널이 내 사용에 반응하기를 원한다는 것입니다. 이를 통해 새 프로젝트를 시작할 때마다 또는 프로젝트의 디렉토리 구조를 변경할 때 별명을 변경해야합니다. 내 질문의 주요 부분은 내가해야 할 일을 말하는 대신 내가 사용하는 것에서 배우기를 원한다는 것입니다.
kramer65

아 알 겠어요 그런 다음 현재 최고 등급의 답변이 트릭을 수행해야합니다. 또는 적어도 밀접하게.
oaskamay 2016 년

4

다음과 같이 디렉토리를 자주 변경해야하는 경우 :

cd an/extremely/long/path/in/which/I/have/some/kinda/project

나는 이것을 한 번만 할 것입니다.

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

그때부터 다음을 사용하십시오.

cd ~/pr[tab]

때에 온다:

./runmyproject --with some --command line --options set

bash 기록 검색을 사용합니다. 명령 프롬프트에서 Ctrl-R을 누르고 'runmy'를 입력하십시오. Voila, 마지막으로 입력 된 모든 옵션이 포함 된 전체 명령이 다시 입력됩니다. 마지막으로 사용한 옵션이 마음에 들지 않고 이전 명령을보고자한다면 Ctrl-R을 계속 눌러 "runmy"가 포함 된 이전 명령을 모두 순환합니다.

symlink 아이디어가 마음에 들지 않으면 Ctrl-R 히스토리 검색이 'cd'명령에도 도움이 될 수 있습니다. [Ctrl-R] ​​/ proj 는 실제로 해당 디렉토리로 cd하는 데 사용한 마지막 명령을 다시 가져올 가능성이 높습니다.

별명을 추가하거나 특수 쉘로 전환하는 대신 항상 이런 종류의 작업을 돕기 위해 설계된 bash 기능을 사용하는 것을 선호합니다. 그렇게하면 원격 컴퓨터에서 또는 동료의 터미널에 앉아 있어야하는 동일한 기능을 사용할 수 있습니다.


제안 해 주셔서 감사합니다. 문제는 예를 들어 프로젝트 폴더가 변경되거나 새 프로젝트를 시작할 때 처리해야 할 다른 것을 설정하고 싶지 않다는 것입니다. 문제는 터미널이 내 사용에 반응하기를 원한다는 것입니다. 내 질문의 주요 부분은 내가해야 할 일을 말하는 대신 내가 사용하는 것에서 배우기를 원한다는 것입니다. 나는 Ctrl-R 기능을 정말로 좋아한다. 그 하나 주셔서 감사합니다!
kramer65


2

이것을 시도하십시오 ... 이것은 히스토리 파일의 모든 명령에서 작동합니다 ... Ctrl+ 와 동일 R하지만 더 직관적이라고 생각합니다 :)

  1. 편집하다 /etc/inputrc

    sudo vim /etc/inputrc
  2. 주석 해제 또는이 두 줄 추가

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. 로그 아웃 / 로그인


그런 다음 역사에 나열된 몇 가지 명령을 작성하십시오 ...

처럼...

ls -lah

쓰다

ls

그리고 누르십시오

Page Up또는 Page Dn"ls"로 시작하는 명령을 검색하여 내역 파일을 탐색합니다.

모든 것을 올바르게했다면 명령을 자동 완성해야합니다 ...

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