Команда псевдонима Unix не работает должным образом - PullRequest
3 голосов
/ 09 марта 2010

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 09 марта 2010

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

Попробуйте настроить его так:

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

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

1 голос
/ 09 марта 2010

Вот для чего xargs:

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

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

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

killaf() { ps -fu $USER | awk '/[M]F1pp/ {print $2}' | xargs kill -9; }
0 голосов
/ 09 марта 2010

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

killmyprocess(){
  ps -eo pid,comm |awk '$2~/MF1pp/{
    cmd="kill -9 "$1
    print cmd
  #  system(cmd) #uncomment to use
  }'
}
0 голосов
/ 09 марта 2010

Попробуйте экранировать $ в awk, обычно его нужно экранировать, чтобы он работал нормально:

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