Domanda

ho un ordine di uccidere alcuni processi, come di seguito:

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

il comando funziona perfettamente bene

>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}'

Quando creo un alias come di seguito ed eseguirlo:

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

dà l'errore precedente.

qualcuno può dirmi quello che potrebbe essere il problema?

È stato utile?

Soluzione

La riga di comando per cui si sta impostando l'alias, non è citato in modo corretto. In particolare, il sottocomando back-citazione incorporato è in corso di esecuzione al momento di impostare l'alias, e non più tardi, quando in realtà si vuole eseguire l'alias.

Provate ad eseguire in questo modo:

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

modifica:. ho fissato le virgolette attorno al comando awk - è difficile da incorporare virgolette singole quando sei già singolo citando

Altri suggerimenti

Questo è ciò che è per xargs:

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

(non testato)

A proposito: io non so perché bash supporta gli alias. Io preferisco usare funzioni:

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

perché vuoi usare uno pseudonimo? utilizzare invece un sub routine. E presumo si intende comando ps come io non so che cosa è psu

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

Prova sfuggire al $ in awk, di solito deve essere sfuggito per farlo funzionare bene:

alias killaf="kill -9 `psu|grep MF1pp|grep -v grep|awk '{print \$2}'`"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top