Ús de seqüències de text, canonades i redireccionaments (II)

En aquest post parlarem, com al post anterior d’aquesta sèrie, de redireccionaments i canonades.

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:

bash

$ 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:

bash

$ 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:

bash

$ 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.

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:

bash

$ mkdir `date +%Y-%m-%d`
$ ls
2019-09-05

Que és equivalent que posar la comanda utilitzant $():

bash

$ 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:

bash

$ 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!