BASH : set -x; <cmde> — À quoi cela sert-il ?

Tout ce qui concerne la programmation.
Répondre
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3546
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Bonjour amis scripteurs , :006:

Je suis en train de décortiquer le script suivant :

mkimage.sh — Create a docker image based on debootstrap(-ed) debian jessie, suitable to run odoo

Odoo et Jessie ne sont pas mon sujet d'étude,

pour moi il s'agit de comprendre :

Pourquoi une simple install via debootstrap
n'est pas suffisant pour créer un conteneur Docker fonctionnel.


Donc pour ne pas passer à côté et ne rien laisser dans l'ombre,
je m'efforce de comprendre tous les détails.

----------------------------------------------------------------

Pour ce qui est de :

set -x; <cmde>

Par ex j'ai testé sur mon poste de travail (testing) :

Code : Tout sélectionner

$ set -x; mkdir -p ./test/test1
+ mkdir -p ./test/test1

et dans une VBox (NakeDeb64 - stable)

Code : Tout sélectionner

# set -x; mkdir -p ./test/test1
+ mkdir -p -p ./test/test1

pour ce que j'ai pu en lire :

Code : Tout sélectionner

$ man bash
...
-x	Après le développement de chaque commande simple, commande for,
	commande  case,  commande  select ou commande for arithmétique,
	afficher la valeur développée de PS4, suivie de la commande  et
	ses arguments développés ou la liste de mots associés.
...
comme :

Code : Tout sélectionner

$ apropos PS4
PS4 : rien d'adéquat
J'ai tout de même trouvé dans Advenced Bash Scripting
sh -x scriptname echoes the result each command, but in an abbreviated manner.
This is the equivalent of inserting set -x or set -o xtrace in the script.

Dois-je en conclure que :
  1. set -x; ... n'a aucun effet sur le résultat des commandes qui suivent
  2. Cela n'a d'utilité que pour le débogage
  3. PS4 est une variable qui enregistre la dernière liste de commandes associée à set -x
  4. cela non plus n'a pas d'incidence sur le résultat des commandes, ni sur le déroulement du script.
[édité]

Je me rends compte - maintenant - que la commande set -x est persistante dans le shell où elle est passée,
d'où l'emploi des parenthèses comme dans :

Code : Tout sélectionner

$ (set -x; pwd)
+ pwd
/home/data/docs/tests/bash/redirection
pour en limiter la portée.

[/édité]

Merci.

PS : j'aurai probablement besoins d'aide sur d'autres points de ce script, je posterai sur de nouveaux sujets
**Simple Utilisateur** -- Debian stable - XFCE
Répondre