2013-04-02 3 views
2

мне нужно просмотреть определенную строку в файл журнала время от времени:Может ли команда/псевдоним быть переменной?

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

Тогда я написал функцию v в моей bashrc, чтобы сделать жизнь проще:

$ v 10 

Хорошо, может быть, я «м немного секущихся волос здесь: Я хотел бы игнорировать пространство тоже:

$ v10 

единственный способ я знаю, чтобы определить множество псевдонимов:

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

Есть ли хороший способ для этого?


Спасибо @Chirlo и @anishsane за идею.

Вот мой окончательный вариант, основанный на @ 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

Это не ответ, но намек:

Когда вы даете какую-либо команду на убунту, & если программа не установлена, то оболочка называет свой собственный обработчик, говоря

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

Вы можете попытаться найти ту часть программы, которая делает это. Затем подключить свой код, который будет выглядеть, если команда соответствия регулярного выражения v[0-9]* & затем выполнить v $lineNumber на основе некоторой разборе команды ...


Основываясь на комментарии 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

Ubuntu предоставляет по умолчанию реализацию функции 'command_not_found_handle'' bash', я считаю. – chepner

+0

Спасибо за информацию :) – anishsane

5

Проверить command_not_found_handle(), если у вас есть bash> 4, вы можете изменить его, чтобы справиться с этим делом. Когда вы вводите v10, и bash не может его решить, эта функция будет вызываться с v10 в качестве первого параметра, и вы поймаете ее и сделаете свое дело там.

+0

Спасибо за идею, извините, что я не могу принять два ответа, хотя мне очень нравится. – Deqing

Смежные вопросы