Ús de seqüències de text, canonades i redireccionaments (II)
Introducció
En aquest post parlarem, com al post anterior d’aquesta sèrie, de redireccionaments i canonades.
Canonades (Pipes)
Les canonades són una altra manera de fer redireccions. Van d’esquerra a dreta connectant la sortida d’una comanda a l’entrada de la següent. Posem un exemple bàsic:
$ cat /proc/cpuinfo | wc
208 1184 6096
On fem un cat de l’arxiu /proc/cpuinfo i passem la sortida de la comanda a l’entrada estàndard de wc, que comptarà línies, paraules i caràcters d’aquesta sortida.
A més, es poden utilitzar varies pipes alhora concatenant la sortida de varies ordres seguides.
També es poden combinar amb redireccions:
$ grep 'model name' </proc/cpuinfo | uniq
model name : Intel (R) Xeon (R) CPU X5355 @ 2.66GHz
Tan les canonades com les redireccions són exclusives (un origen només pot tenir un destí). Però es pot redirigir la sortida a un arxiu i veure-la també per pantalla amb tee:
$ grep 'model name' </proc/cpuinfo | uniq | tee cpu_model.txt
On el programa uniq dona la seva stdout a la stdin de tee, a més de donar-li el nom de l’arxiu perquè el creï i hi escrigui la entrada estàndard.
Si volem afegir el contingut en comptes de sobreescriure’l, afegirem la opció -a a la comanda tee.
Substitució de comanda
Una altra manera d’utilitzar la sortida d’una comanda és amb substitució de comandes. Al posar una comanda entre cometes inverses, Bash canviarà el contingut amb la sortida estàndard:
$ mkdir `date +%Y-%m-%d`
$ ls
2019-09-05
Que és equivalent que posar la comanda utilitzant $():
$ mkdir $(date +%y-%m-%d)
$ ls
2019-09-05
Un altre mètode per utilitzar la stdout com a stdin d’una altra comanda és amb xargs, que utilitza el que rep per stdin per executar una comanda amb els continguts com a argument:
$ find /usr/share/icons -name 'debian*' | xargs identify -format "%f:%w%h\n"
debian-swirl.svg: 48x48
debian-swirl.png: 22x22
debian-swirl.png: 32x32
debian-swirl.png: 256x256
debian-swirl.png: 48x48
debian-swirl.png: 16x16
debian-swirl.png: 24x24
debian-swirl.svg: 48x48
El programa identify és part d’ImageMagick, un conjunt d’eines per inspeccionar, convertir i editar arxius d’imatge.
La opció -n 1 a xargs requereix que xargs executi la comanda amb un sol argument alhora (si té diferents arguments, executarà la comanda un cop per argument).
I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!