Massa sovint, el media center Kodi es resisteix a l’ordre de tancar, cosa que m’obliga a recórrer al kill -9
. Amb un alies, m’estalviaré el procediment habitual (que implica escriure un parell d’ordres en el terminal):
$ ps -e | grep kodi
8457 ? 00:00:00 kodi
8462 ? 00:00:20 kodi.bin
$ kill -9 8462
Senzill, però tediós, repetitiu. Vaig decidir automatitzar-ho amb un àlies que inclouria al .bash_aliases
. Després d’investigar en els documents man i en un parell de pdf molt útils, he arribat a arribat a crear el següent àlies que m’ho soluciona:
alias killkodi='victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f1 -d \;` ; if [ "$victima" = "" ] ; then victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f2 -d \;` ; fi ; kill -9 $victima'
Dificultats a resoldre
Es tractava, com feia manualment, d’obtenir (amb ps - e | grep kodi.bin
) l’identificador numèric del procés per a utilitzar-lo en l’ordre kill -9
; amb cut
, es pot obtenir el fragment desitjat (considerat com un «camp» en una línia de text). El problema és que l’identificador pot constar de quatre xifres o de cinc; en el primer cas, això fa aparèixer un espai blanc al davant, cosa que converteix l’indicador en el segon camp; en canvi, si consta de cinc xifres, no hi ha cap espai en blanc al davant i, aleshores, l’indicador és el primer camp de la línia.
La solució passa per introduir un if ... then ... fi
després d’extreure el primer camp de la línia i comprovar si el fragment extret és una cadena nul·la [""
]; de ser així, cal extreure’n el segon, que contindrà el codi que busquem. En canvi, si la primera cadena que hem extret no és nul·la, no cal fer-hi res més perquè ja hem obtingut el codi numèric que cercàvem, l’hem assignat a la variable $victima
i podem emprar kill -9 $victima
sense més complicació.
Implementació de la solució
Ús l’explique breument els blocs lògics que formen l’ordre:
- de primer, assigna a la variable
$victima
el valor del primer camp (victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f1 -d \;`
) ; - si
$victima
es una cadena nul·la (if [ "$victima" = ""]
), aleshores (then
) assigna a$victima
el valor del segon camp (victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f2 -d \;`
); finalment, - mata l’aplicació utilitzant-ne l’indicador numèric correcte (
kill -9 $victima
).
Ja estava familiaritzat[2]Més que familiaritzat, n’estava fart. amb ps -e | grep kodi.bin
per a obtindre l’indicador de l’aplicació que volia matar, així com amb kill -9
. Vaig haver, però, de descobrir cut
per a automatitzar l’extracció de l’indicador de l’aplicació, i de tr
per a establir prèviament un separador de camps fàcil de manipular [;
][3]Escalera, Sergio; Masip, David. Iniciació a l’administració de sistemes. Universitat de Barcelona, Dept. Matemàtica Aplicada i Anàlisi (presentació en pdf). Diapositives 182 i 183.. Com que estava desentrenat amb això del Bash, em va vindre bé consultar una breu introducció per refrescar conceptes molt bàsics[4]Suppi Boldrito, Remo. Programació d’ordres combinades (shell scripts). UOC. Document en pdf..
Espere que la representació dels tres tipus de cometes utilitzats en el codi siga la correcta! Els comandaments que proporcionen el codi numèric que s’ha d’assignar a $victima
van entre accents greus [`
]. La definició del àlies va entre cometes simples ['
], cosa que obliga a emprar les cometes dobles ["
] per indicar arguments a l’ordre tr
.
Ara, sí, ja puc tancar el Kodi des del terminar de manera ràpida i còmoda.
Referències, comentaris, destrellats...
↑1 | Això sí, la diversió i tot el que he après en el procés no m’ho treu ningú 🙂 . |
---|---|
↑2 | Més que familiaritzat, n’estava fart. |
↑3 | Escalera, Sergio; Masip, David. Iniciació a l’administració de sistemes. Universitat de Barcelona, Dept. Matemàtica Aplicada i Anàlisi (presentació en pdf). Diapositives 182 i 183. |
↑4 | Suppi Boldrito, Remo. Programació d’ordres combinades (shell scripts). UOC. Document en pdf. |