2010-03-09 2 views
3

у меня есть команда, чтобы убить некоторые процессы, как показано ниже:Unix команда псевдоним не работает, как ожидалось

kill -9 `psu|grep MF1pp|grep -v grep|awk '{print $2}'` 

команду отлично работает

>psu|grep MF1pp|grep -v grep|awk '{print $2}' 
29390 
29026 
$>kill -9 `psu|grep MF1pp|grep -v grep|awk '{print $2}'` 
$>psu|grep MF1pp|grep -v grep|awk '{print $2}' 

, когда я создать псевдоним, как показано ниже, и запустить его :

alias killaf="kill -9 `psu|grep MF1pp|grep -v grep|awk '{print $2}'`" 



$> psu|grep MF1pp|grep -v grep|awk '{print $2}' 
5487 
5272 
$>killaf 
ksh: kill: bad argument count 

дает вышеуказанную ошибку.

может кто-нибудь сказать мне, что может быть проблемой?

+2

Почему закрытые голоса? – Vijay

+1

@benjamin они голосуют за то, что их переведут в суперпользователя - лично я не согласен, так как это явно проблема сценария оболочки. – Pointy

+1

Наверное, потому что это не связано с программированием - он лучше подходит для serverfault.com (системный администратор.) –

ответ

5

Командная строка в котором вы настраиваете псевдоним не котируется правильно. В частности, подкоманда, встроенная в обратную кавычку, выполняется во время настройки псевдонима, а не позже, когда вы действительно хотите запустить псевдоним.

установки его таким образом Try:

alias killaf='kill -9 `psu|grep MF1pp|grep -v grep|awk '\''{print $2}'\''`' 

редактировать: Я установил кавычки команды awk - это сложно вставлять одинарные кавычки, когда вы уже сингл кавычки.

+0

хороший ответ. Это работает отлично :) – Vijay

+0

Почему именно нужны '' \ '' 's? – Vijay

-1

Try побега $ в AWK, как правило, он должен быть экранирован, чтобы заставить его работать нормально:

alias killaf="kill -9 `psu|grep MF1pp|grep -v grep|awk '{print \$2}'`" 
+0

нет, это не поможет, я не думаю. – Pointy

+0

это не работает :( – Vijay

0

Почему вы хотите использовать псевдоним? вместо этого используйте подпрограмму. И я предполагаю, что вы имеете в виду ps команду, как я не знаю, что psu является

killmyprocess(){ 
    ps -eo pid,comm |awk '$2~/MF1pp/{ 
    cmd="kill -9 "$1 
    print cmd 
    # system(cmd) #uncomment to use 
    }' 
} 
+0

psu вот 'ps-fu $ USER'.its снова псевдоним. – Vijay

1

Это то, что xargs для:

alias killaf='ps -fu $USER | awk '/[M]F1pp/ {print $2}' | xargs kill -9' 

(непроверенные)

BTW: Я не знаете, почему bash поддерживает псевдонимы. Я предпочитаю использовать функции:

killaf() { ps -fu $USER | awk '/[M]F1pp/ {print $2}' | xargs kill -9; } 
Смежные вопросы