Comando Alias Unix che non funziona come previsto
-
18-09-2019 - |
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?
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}'`"