Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/05/2019, à 22:19

Arbiel

Présentation des commentaires d'un script

Bonsoir

Je ne suis pas certain de publier le script ci-dessous dans la bonne rubrique, car il n'est peut-être pas très «utile», contrairement à ce qu'annonce le titre. Par ailleurs, et cela n'a pas beaucoup de rapport avec le présent sujet, je suis toujours surpris de constater, surtout dans les pages de la toile, la présence d'une petite section de "liens utiles", en me demandant si un jour ou l'autre on verrait aussi la section «liens inutiles».

J'ai parfois des difficultés à me remémorer comment fonctionnent certains de mes scripts. J'ai récemment décidé, à l'occasion de la rédaction d'un nouveau script, de faire quelques efforts et d'insérer des notices explicatives dans le corps même du script, et de les afficher dans les onglets d'une fenêtre gérée par yad.

J'ai pensé que la fonction que j'ai alors écrite pour cela pourrait intéresser certains d'entre vous, et je vous la livre ci-dessous

#! /bin/bash
version="notices 2019_05_14 19:21";
##############################################################################################################
## Enregistrer le script et l'exécuter tel quel pour obtenir des explications
#############################################################################################################
	function liste_notices {
		local leScript="${1}" ;
		local f_notices="$(tempfile -p not -s .aide)" ;
		local f_ind="$(tempfile -p ind -s .aide)" ;
		local indice
		declare -a ind;
		sed -n -r "\-^[[:space:]]*#+[[:digit:]]+[^[:digit:]]*-s/(^#[[:digit:]]+)(.*)/\1_/p" "${leScript}" 1>"${f_notices}";
		while indice="$(grep -v -m 1 -Ef "${f_ind}" "${f_notices}")"; do echo "${indice}" >> "${f_ind}"; ind=(${ind[@]}  "${indice}"); done;
		echo "${ind[@]}" | tr "#_" " " ;
		rm "${f_notices}" ;
		rm "${f_ind}" ;
		return 0
	}
	function notices () {
		local leScript="${1}";
		local i j com liste_tab f_txt f_aide texte code
		local insecable=$'\u202F'
		[[ -z "${leScript}" ]] && leScript="${0}" ;
		com="$(cat "${leScript}" | sed -n -r "\-^[[:space:]]*#+[[:digit:]]+[^[:digit:]]*-p")";
		! which yad &>/dev/null && {
			echo "L'application yad n'étant pas disponible, les notices sont présentées sur la sortie standard"; echo; echo;
			echo "${com}"
			return 0;
		}
		{ code="$(dd if=/dev/urandom bs=2 count=1 | hexdump -v -e '/2 "%02u"')" ; } 2>/dev/null
		j=0
		insecable=$'\u202F'
		for i in $(liste_notices "${leScript}") ; do
			j=$((j+1));
			f_aide="$(tempfile -p ucg -s .aide)";
			f_txt="$(tempfile -p ucg -s .txt)";
			texte="$(echo "${com}" | sed -n -r "/^[[:space:]]*#+${i}($|[^[:digit:]])/{s/^[[:space:]]*#+${i}//;p}")";
# avec remplacement des espaces du titre de section par un espace insécable, car yad supprime les "soulignés"
			titre_tab="$(echo "${texte}" | head -1 | sed -r "s/^[[:space:]]*(.*)[[:space:]]*$/\1/" | sed -r "s/[[:space:]]+/${insecable}/g")";
			echo "${texte}" | sed -r 1d >"${f_aide}" ;
			yad --plug=${code} --tabnum=$((${j})) --show-uri --text-info --wrap --filename="${f_aide}" &>/"${f_txt}" &
			liste_tab="${liste_tab} --tab=${titre_tab}";
			done
		yad --notebook --key=${code} --title="Notices" --wrap --center --width=1300 --sticky --height=600 ${liste_tab};
		return 0;
	}
############2Fonctionnement
#2Les lignes ci-dessous n'ont d'autre intérêt que de montrer brièvement le fonctionnement de la fonction «notice». Elles peuvent bien évidemment être supprimées dans le script enregistré localement.
#2
#2Si <abc> représente le chemin d'accès au script rendu exécutable, la présentation des notices s'obtient par la commande
#2
#2<abc> notices
#234Notices
#1Onglets
	##15Ordre de présentation
#234Les notices sont présentées dans des lignes commentaires constituées d'espaces éventuels suivis d'un ou de plusieurs «#», puis d'un numére de notice. Toutes les lignes d'une même notice portent le même numéro. Ce numéro n'a aucun impact sur l'ordre de leur présentation.
#15Les notices sont présentées selon l'ordre d'apparation des lignes de titre.
#1La première ligne d'une notice sert de titre à l'onglet dans lequel elle est présentée. Les lignes d'une même notice peuvent ne pas constituer un ensemble ininterrompu de lignes, mais être réparties dans le script au gré de l'utilisateur.
##3Liens
#3Les notices peuvent faire référence à des pages de la toile, comme par exemple la page d'accueil de la documentation https://doc.ubuntu-fr.org/
"${@}"

Arbiel

Dernière modification par Arbiel (Le 14/05/2019, à 18:29)


Arbiel Perlacremaz
Dell Vostro Ubuntu 18.04 64 bits
J'ai abandonné azerty au profit de bépo, google au profit de Lilo et mes adresses électroniques au profit d'une messagerie réellement sécurisée, Protonmail.

Hors ligne