2013-04-02 2 views
2

나는 때때로 로그 파일의 특정 라인을 볼 필요가 : 나는,명령/별칭을 변수로 지정할 수 있습니까?

$ v 10 

이 좋아 어쩌면 : 그럼 쉽게 인생을 만들어 내 bashrc의 기능 v을 썼다

$ head -10 log.txt|tail -1 # to view line 10 of log.txt 

'여기에 약간의 분할 머리를 M :

$ v10 

내가 아는 유일한 방법은 별칭을 많이 정의하는 것입니다 : 내가 너무 공간을 무시하고 싶습니다

alias v1='v 1' 
alias v2='v 2' 
alias v3='v 3' 
alias v4='v 4' 
... 

좋은 방법이 있습니까?


감사합니다. @Chirlo 및 @anishsane입니다.

eval "`declare -f command_not_found_handle | sed s/command_not_found_handle/command_not_found_handle_orig/`" 
command_not_found_handle(){ 
    if expr match "$1" "v[0-9][0-9]*" >/dev/null ; then 
     v ${1:1} 
     return $? 
    fi 
    command_not_found_handle_orig "[email protected]" 
} 

답변

2

이 답변은 아니지만 힌트 : 여기에

는 @ anishsane에 따라 내 최종 버전, 일부 수정과의

것은 당신이 우분투에 대한 몇 가지 명령을 &하는 경우를 줄 프로그램이 설치되어 있지 않으면 셸은 자신의 핸들러를 호출하여 다음과 같이 말합니다.

The program 'something' is currently not installed. You can install it by typing: 
sudo apt-get install something 

이 작업은 프로그램에서 수행 할 수 있습니다. 그런 다음 명령은 다음 명령의 일부 구문 분석을 기반으로 v $lineNumber 실행 정규식 v[0-9]* & 일치하는 경우 볼 것 코드, ...

chepner의 의견을 바탕으로

, 여기에 업데이트입니다 훅 :

을 아래에 추가 당신의 .bashrc에 :

eval "`declare -f command_not_found_handle | sed s/command_not_found_handle/command_not_found_handle_orig/`" 

command_not_found_handle(){ 
    if expr match "$1" "v[0-9]*" >/dev/null ; then 
     v ${1:1} 
     return $? 
    fi 
    command_not_found_handle_orig "$[@]" 
} 
+2

우분투는 'bash'의'command_not_found_handle' 함수의 기본 구현을 제공합니다. – chepner

+0

정보를 제공해 주셔서 감사합니다. :) – anishsane

5

확인 당신이> 4 bash이있는 경우, 당신은이 사건을 처리하기 위해 그것을 대체 할 수 있습니다 command_not_found_handle(). v10을 입력하고 bash가이를 해결할 수없는 경우이 함수는 v10을 첫 번째 매개 변수로 사용하여 호출하고 catch하여 거기에서 수행합니다.

+0

아이디어를 주셔서 감사합니다. 정말 맘에 들지만, 저는 두 가지 대답을 받아 들일 수 없습니다. – Deqing

관련 문제