[gull] Truc et astuces: bash connector

felix felix at f-hauri.ch
Tue Feb 6 17:42:44 CET 2018


Bonjour,

Intro:
  J'ai réalisé des ``connecteurs bash'' pour simples commandes répondant
  une ligne par une ligne, ou pour des clients SQL, testée avec
  "sqlite3" (3.16.2 2017-01-06), "mysql" (Ver 15.1 Distrib 10.1.26-MariaDB)
  et "psql" (PostgreSQL 9.6.6).

  A noter que les connecteurs SQL, utilisant les tabulations `\t` comme
  séparateurs, les champs ou réponses ne doivent pas en contenir!!
  A repenser en fonction du client et des séparateurs probables (voire
  multi-caractères).

Présentation:

  Pour effectuer un calcul, on peut utiliser `bc`:

    myPi=$(bc -l <<<'4*a(1)')

  Pour interpréter une date, on peut utiliser `date -d ""`

    myUnixDate=$(date -d "2018-01-01 00:00 CET" +%s)

  Pour ces opération, on lance un "fork" (sous-process) qui se termine
  à chaque fois (ouverture d'un process, démarrage du binaire, transmission
  données et résultat, fermeture du process).

  Or ces commandes peuvent fournir plus d'une réponse. Il vaut donc la
  peine, si l'on doit se réferer à ces comandes de manière répétitive,
  de trouver un moyen de n'initier qu'un seul "fork" et de converser avec.

  Test de base:

    mkfifo /tmp/myFifoForBc
    exec 5> >(bc -l >/tmp/myFifoForBc)
    exec 6</tmp/myFifoForBc
    rm /tmp/myFifoForBc

  Le fifo peut être effacé car il est déjà ouvert en lecture et en ecriture.
  Cela permet d'éviter que d'autre l'utilisent et évite l'oubli en fin de
  tâche.

  De là:

    echo "3*4" >&5
    read -u 6 foo
    echo $foo
    12

  mais tant que l'on de ferme pas les ``fd'' (5 et 6, en l'occurence), on
  peut continuer d'utilise `bc` qui est *déjà* lancé et prêt.

    echo >&5 "pi=4*a(1)"
    echo >&5 "2*pi*12"
    read -u 6 foo
    echo $foo
    75.39822368615503772256

Bref, j'en ai fait un fichier de librairie à "sourcer" ou à lancer pour
la démo:

  https://f-hauri.ch/vrac/shell_connector.sh

Question et commentaires bienvenus...

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list