El teu blog de Linux en català

Utilització de «set» en la programació de shells

A GNULinux.cat ja hem explicat diversos usos de l’ordre «set». Per exemple, a la nostra documentació sobre ordres de terminal indiquem que, per sí sol, ens mostra les variables d’entorn que tenim declarades en la nostra sessió de terminal. A més, també hem vist que ens permet moure’ns per les ordres de terminal que hem executat com si fos el «vi». Però «set» té moltes més utilitats.

En general, «set» ens permet modificar el comportament de l’intèrpret d’ordres que utilitzi la shell que volem executar o el terminal des del qual estem treballant. El comportament d’aquesta es modifica activant o desactivant unes certes opcions. D’una banda, això implica que les opcions de «set» no tenen per què ser iguals en tots els intèrprets d’ordres. Les opcions que jo explicaré aquí funcionen en bash (l’intèrpret més habitual a GNU/Linux), ksh (molt habitual en entorns Unix com AIX i HP-UX) i zsh. En els altres intèrprets no n’estic segur, tot i que al final us explicaré com esbrinar-ho.

La utilització bàsica de «set» és la següent: Si volem activar una o més opcions, farem «set  –opcions». En canvi, si les volem desactivar, executarem «set  +opcions». Fixeu-vos que activem amb un «-» i desactivem amb un «+». A continuació us resumeixo les opcions que trobo més interessants:

  • set  -a : A partir d’aquesta sentència, les variables que declarem s’exporten automàticament, sense necessitat de fer un «export  nom_variable».
  • set  -b : Si la nostra shell s’executa en segon pla, rebrem notificació sobre com ha acabat immediatament, sense esperar que executem la propera comanda des de terminal. No utilitzo massa aquesta opció, però en alguns casos pot ser interessant.
  • set  -e : Si algun dels programes de la nostra shell acaba en error, s’aturarà l’execució de la shell, i retornarà el mateix codi que el programa que peta. Recordeu que aquest no és el funcionament habitual. Com a excepcions, l’execució no finalitzarà si l’ordre que acaba en error es troba dins una condició d’una sentència «if», en un bucle, o si té concatenacions del tipus «&&», «||» o «!».
  • set  -x : Mostra les línies que va executant. Molt útil si volem depurar una shell.
  • set  -v : Mostra les línies de la shell a mida que les va llegint. És una mica diferent del «set  -x», però també és molt útil quan depurem una shell.

A més, en una mateixa sentència «set» podem activar o desactivar més d’una opció. Per exemple, quan depurem una shell és molt útil posar un «set  -xv» abans de les línies que vulguem depurar, i fer un «set  +xv» un cop hagin passat.

Recordeu també que aquestes opcions que activem són pròpies de l’intèrpret que executem. Si volem activar alguna d’aquestes opcions per a tota la shell, hi ha una altra manera de fer-ho. En la primera línia de la shell, molts cops indiquem al sistema quin intèrpret ha d’utilitzar. Per exemple, si volem indicar al sistema que utilitzi bash com a intèrpret per executar la nostra shell, a la primera línia posarem:

#!/bin/bash

Si, a més, volem que tota la shell tingui activades les opcions «a» i «e» que hem indicat abans, podem posar un «set -ae» just després, o directament indicar-ho en aquesta primera línia:

#!/bin/bash -ae

Per últim, com us havia comentat, les opcions que us he indicat funcionen per a bash, ksh i zsh. Però potser esteu més acostumats a utilitzar csh o sh. O poster voleu conèixer totes les opcions de bash (jo només he enumerat les que em semblen més interessants). Per a fer-ho, només cal que mireu la documentació de l’intèrpret que us interessi. Per exemple, per a csh seria:

man csh

Entre la informació que us doni aquesta ordre hi trobareu totes les opcions que té l’intèrpret d’ordres csh.

Deixa un comentari

Your email address will not be published.