자주 사용하는 명령을 빠르게 저장하고 액세스하는 방법은 무엇입니까?


37

나는 일상적으로 실행해야 할 많은 명령을 가지고 있으며, 종종 약간의 변형이 있습니다.

지금 나는 그것들을 모두 저장 .bash_history하고 사용하고 있습니다 CTRL- R그것들을 액세스하는데 더 좋은 방법이 있는지 궁금합니다. 내가 찾는 것 :

  • 새로운 명령을 쉽게 추가
  • 원하는 명령을 쉽게 검색하고 다시 실행할 수 있습니다.
  • 제안에서 원치 않는 명령을 피하십시오

나는 몇 가지를 할 경우 : 불행하게도, bash_history는 세 번째 요구에 너무 강하지 cd하고 ls신속하게 기록 파일을 채 웁니다. 나는 최근에 배웠고 HIST_SIZE복제 또는 특정 명령을 피하기 위해 기록을 구성 할 수 있지만 모든 것을 구성하기 전에 가장 좋은 방법인지 확인하고 싶었습니다.


7
일상적인 명령에 alias더 유용 할 수 있습니다. 예. alias gfc="git fetch origin"

답변:


20

다음 readline 명령이 매우 유용합니다.

history-search-backward,
history-search-forward

(그들이 평소와 다른 인식 reverse-search-history, forward-search-history,에 묶여 Ctrl- R, Ctrl- S).

나는에 관련된 이러한 명령이 Ctrl- UpCtrl- Down에 다음 줄을 넣어 ~/.inputrc:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

작동 방식 : 명령 시작 부분에 문자를 몇 개 쓰지 않고 Ctrl-를 누르면 Up해당 접두사로 시작하는 다음 이전 명령이 표시되고 다시 누르면 다음이 표시됩니다. 만족하면 명령을 수정 한 후을 눌러 Enter실행하십시오.


1
+1, 위쪽 화살표 및 아래쪽 화살표 키 (CTRL 수정 자 없음)에 바인딩되어 있지만 동일한 기능을 수행합니다. 당신이 원하는 경우 마찬가지로 당신이 필요로하는 라인은 "\e[B": history-search-forward"\e[A": history-search-backward
사이먼 휘태커

또한 버퍼가 충분히 큰지 확인하기 위해 확장 HISTFILESIZE및 / 또는 HISTSIZE(zsh 만 지원 HISTSIZE, bash는 둘 다 지원) 고려하십시오. SO 질문은 HISTSIZE 대 HISTFILESIZE를 강타합니까? 더 밝게 할 수 있습니다.
Adam Katz

56

또 다른 팁 : 때로는 주석을 사용하여 명령을 북마크 / 태그 지정합니다.

my_command #bookmark

그때:

[ctrl-r]#bookmark

사랑해!-좋아.
그렉

17
배쉬 태그! 천재. :-)
Simon Whitaker

아주 좋아요! 나는 이것을 mysql-cli에도 사용할 것이다 :)
Konerak

훌륭합니다! 불행히도 zshell은 대화식 세션에서 #을 주석의 시작으로 취급하지 않습니다. 비슷한 트릭을 알고 있습니까?
Nathan Long

1
@NathanLong : $_bookmark. 존재하지 않는 변수가 아무것도 확장되지 않는다는 사실을 악용하는 것은 끔찍한 해킹이라고 주장 할 수는 있지만 공간이 허용되지 않는다는 경고와 함께 작동합니다 (대신 _ 대신 사용).
kampu 2016 년

7

범위가 매우 제한적이지만 다음 두 확장 자리 표시자를 지적하고 싶습니다.

!! 

마지막 명령의 자리 표시 자 확장입니다. sudo명령 앞에 놓는 것을 잊어 버린 경우에 유용합니다 .

!$ 

마지막 매개 변수를 반복합니다. 다른 명령을 반복하고 싶을 때 유용a/very/long/path/name/you/do/not/want/to/type/again


그렇습니다. 좋은 팁 ... 내가 사용했던 것을 기억한다면 :)
Jeach

6

'별칭'사용

alias 이를위한 훌륭한 도구입니다.

  • 명령 행에서 하나를 쉽게 선언하여 현재 쉘 세션 중에 사용할 수 있습니다.
  • 나중에 사용할 경우 쉘 구성에 추가 할 수 있습니다.

별명을 사용하면 별명을 입력 한 것과 똑같으므로 매우 유연합니다. 예를 들어 파이프와 함께 사용할 수 있습니다.

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep

아직 지정하지 않은 플래그를 전달하여 "약간의 변형"을 수행 할 수 있어야합니다.

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches

5

자주 사용하는 명령에 대해 최소한의 쉘 스크립트를 작성하고 짧은 이름을 지정합니다. 그것들은 모두 같은 장소에 저장되며에 추가됩니다 PATH.

그렇게하면 매우 복잡한 명령에 대한 바로 가기 액세스가 alias가능하지만 달리 작업의 변경 가능한 부분을 바로 가기의 명령 줄 인수로 바꿀 수 있습니다.


3
인수 만 전달하려면 대신 함수 정의를 고려하십시오. 당신은 전체 스크립트를 필요로하는 경우,이 :) 좋은 솔루션입니다
Konerak

@Konerak 나는 그것을 시도해야합니다. 나는 보통 스크립트를 만들지 만 함수를 정의하는 것이 훨씬 깨끗할 것입니다.
ixtmixilix

4

Git에서 .bash_history 의 사본을 유지하고 있습니다. 이를 단순화하기 위해 설정했습니다

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

.bashrc에 , 다음 명령 A의 (일반적으로 사용하기 위해 수정) 정리 스크립트

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

에 라인을 추가하기 전에 실행 git gui합니다. 기록 파일은 모든 명령으로 수정되므로 특정 저장소를 업데이트하는 특수 명령도 있습니다.

git stash && git pull && git stash pop

을 언급하는 데 주로 +1하며 HISTCONTROL=ignorespace, 때로는 역사를 어지럽히 지 않는 데 중요합니다.
quodlibetor

2

역사와 관련된 다른 모든 대답 중에서도.

내가 설정

HISTFILESIZE=2024
HISTSIZE=1024

~ / .bash_profile에서

다른 의견 이외에 : 역사

또 다른 유용한 기능은 ...

와 함께 역사 리콜 시작

!first few letters<ESC>Ctrl-E

처음 몇 글자로 시작한 마지막 명령을 기억합니다

예 :

!find<ESC>Ctrl-E

GUI를 사용하는지 또는 명령 줄 만 사용하는지 언급하지 않았습니다. GUI를 사용하는 경우 영구 클립 보드 관리자 중 하나를 사용하여 일반적으로 사용되는 명령, 사용자 ID, 비밀번호, URL 등을 복사 / 붙여 넣기 할 수 있습니다.


와우, !find<ESC>CTRL-E작동하지만 내일 기억할 수있을 것 같지 않습니다. ESC CTRL-E 란 무엇입니까?
Konerak

확장 된 키에 대한 바인딩
bsd

0

사용하는 학습 Ctrl-R및 것은 Ctrl-S쉽게 역사에서 찾고있는 명령어를 검색 할 수 있습니다, 당신은 이미 중복을 무시하고 bash는 기록 파일의 위치를 변경하는 HISTCONTROL 환경 변수를 발견했다.

나는 보통 많은 할 Ctrl-R다음을 Ctrl-E일부 매개 변수를 변경, 나는 타격에 의해 발견 된 명령을 생략하는 경우 Ctrl-R, 너무 많은 시간을 Ctrl-S구출하러.


2
종종 tty는 Ctrl-S가 "중지"순서로 설정되며 정방향 검색에는 사용할 수 없습니다 (직접).
enzotib

이러한 경우 정방향 검색을 <kbd> Ctrl-S </ kbd> 이외의 것으로 다시 매핑 할 수 있습니다.
Evgeny


0

위의 좋은 답변 외에도 kde 또는 gnome을 기반으로 GUI를 사용하는 경우 AutoKey가 놀랍도록 도움이 될 수 있습니다.

https://code.google.com/p/autokey/

몇 문자를 입력하거나 핫키를 눌러 트리거되는 문구를 만들 수 있습니다. 이 문구는 입력으로 대체되거나 추가됩니다.

또한 파이썬으로 작성된 스크립트를 지원하여 파이썬을 알고 있다면 거의 모든 것을 할 수 있습니다. 나는 아직 파이썬을 모르지만, 깔끔한 일을하기 위해 이미 매우 기본적인 스크립트를 얻고있다.

모든 것이 키보드에서 나오는 것처럼 보이므로 키보드 입력을받는 모든 응용 프로그램과 데스크탑 자체에서 작동합니다.

여기에는 이러한 것들이 어떻게, 어디서 활성화되는지 제어하는 ​​많은 옵션이 있으므로 콘솔에서만 작동하는 일부와 다른 창에서만 작동하는 일부를 가질 수 있습니다. 구문을 트리거하는 문자열을 입력하자마자 구문이 실행되도록 설정하거나 OK를 줄 때까지 기다릴 수도 있습니다.


0

다른 사람들이 말한 것처럼 별칭은 친구입니다. 조금 더 복잡한 것들 (명령 사이에 인수가 필요할 때)은 .zshrc에서 다음과 같은 함수를 사용합니다.

function ff() { find . -iname "*$**" }

찾기와 같이 작동합니다 (어떤 이유로 db를 사용할 수없는 경우 사용합니다). 또는

function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }

killall을 대체합니다.


0

Cntl-R에서 되돌아보기 위해 사용 하는 것 .bash_history외에도 / ~/develop와 같은 긴 명령을 넣은 디렉토리에 README 파일이 있으므로 나중에 필요할 때 다시 올 수 있습니다. 마찬가지로 새 버전의 Linux / Ubuntu를 설치 한 후 일반적으로 설치하는 모든 공통 패키지 이름을 넣을 파일을 만들 계획 입니다. 따라서 아이디어는 모든 디렉토리 (예 : 비디오, 오디오 등) 내에 README 파일을 가지고 있고 나중에 알아야 할 일반적인 명령 / 팁을 넣는 것입니다.gitsvn~/install/README

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