Contenu | Rechercher | Menus

Annonce

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 27/04/2016, à 18:04

Le Goss

[Résolu] bash: modification d'un script par lui-même

Bonjour à tous,

J'écris un script dont le résultat des requêtes est affiché via un navigateur.
Le script a pour but de choisir lequel (de navigateur).

#!/bin/bash
clear
defaut=$(cat /etc/alternatives/x-www-browser | grep "^LIBDIR" | sed "s/LIBDIR=\/usr\/lib\///g")

nav=$defaut

echo "Navigateur utilisé par défaut sur cette machine:    $defaut"
echo "Navigateur utilisé actuellement pour ce script:     $nav"

echo "Liste des navigateurs présents sur cette machine :"
echo "=============================================="
update-alternatives --list x-www-browser  | sort | uniq | sed "s/\/usr\/bin\///g"
echo "=============================================="
echo
read -p "Choix du nouveau navigateur: " choix
if [ -z "$choix" ]; then
	echo
	echo "Le navigateur utilisé pour le script est toujours le même: $nav"
	echo
else
	sed -i "5cnav=$choix" choixnavigateur
	echo
	echo "Le nouveau navigateur utilisé pour le script est: $choix"
	echo
fi

Pour se faire, j'oblige le script à se modifier lui-même (ligne 21) pour garder le choix de l'utilisateur dans une variable (ligne 5).
Ainsi, lorsque le script sera relancé, le changement sera conservé, jusqu'à la prochaine modification décidée par l'utilisateur.

Est-il imprudent ou hasardeux de modifier le contenu du script par lui-même? et ce dans la mesure où il sera largement distribué ultérieurement...
Si oui, existe-t-il une solution?
Surtout que le script contiendra une flopée de manip comme celle-là.

Précision: le script n'affecte pas le navigateur par défaut.

Question subsidiaire:
la commande

echo $BROWSER

me renvoie une ligne vide.
Du coup, j'ai du trouver "à l'arrache" un autre moyen pour que le script me retourne le navigateur par défaut (ligne 3).
S'il y a mieux, je suis preneur.

Merci pour votre aide,
Cordialement

Dernière modification par Le Goss (Le 27/04/2016, à 21:20)


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#2 Le 27/04/2016, à 18:36

pingouinux

Re : [Résolu] bash: modification d'un script par lui-même

Bonjour,
Plutôt que de modifier le script, tu peux écrire la variable dans un fichier, que tu relis dans ton script.

Hors ligne

#3 Le 27/04/2016, à 18:37

Le Goss

Re : [Résolu] bash: modification d'un script par lui-même

Merci pour ta réponse.
Comment fait-on ce type de lien?


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#4 Le 27/04/2016, à 18:48

pingouinux

Re : [Résolu] bash: modification d'un script par lui-même

En tête de ton script, si le fichier de sauvegarde existe, tu y lis le navigateur par défaut. Sinon, tu utilises un navigateur par défaut en dur dans le script.
À la fin du script, tu écris le nom du navigateur par défaut dans le fichier de sauvegarde.

Hors ligne

#5 Le 27/04/2016, à 18:58

Le Goss

Re : [Résolu] bash: modification d'un script par lui-même

J'ai du mal à suivre...
En cherchant, j'ai trouvé qu'on pouvait "inclure" un fichier dans un script avec la commande "source"
J'ai donc coupé/collé les 2 variables de mon script vers un fichier que j'appelle avec

source fichier

Je modifie la commande sed... et ça marche!
Est-ce correct?


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#6 Le 27/04/2016, à 19:07

kholo

Re : [Résolu] bash: modification d'un script par lui-même

bonjour,
le plus propre, je pense, est d'écrire dans un fichier qui se trouverait dans le dossier utilisateur
$HOME/ton_appli par exemple.
un petit mkdir si le dossier n'existe pas ;

mkdir $HOME/ton_appli

créer le fichier

touch $HOME/ton_appli/navigateur

pour écrire dans le fichier '>'

echo $navigateur > "$HOME/ton_appli/navigateur"

et pour le lire

navigateur=$(cat  "$HOME/ton_appli/navigateur")

ou avec '<'

navigateur=$(< "$HOME/ton_appli/navigateur")

Dernière modification par kholo (Le 27/04/2016, à 19:07)

Hors ligne

#7 Le 27/04/2016, à 19:13

pingouinux

Re : [Résolu] bash: modification d'un script par lui-même

Après avoir défini defaut

fichier_defaut=/..../mon_fichier_de_sauvegarde
if [ -f "$fichier_defaut" ]; then
   nav=$(cat "$fichier_defaut")
else
   nav=$defaut
fi

À la fin du script

echo "$nav" >"$fichier_defaut"

Hors ligne

#8 Le 27/04/2016, à 19:39

Le Goss

Re : [Résolu] bash: modification d'un script par lui-même

Nickel! merci beaucoup!
Voici le script prenant en compte ces propositions:

#!/bin/bash
clear
navdefaut=$(cat /etc/alternatives/x-www-browser | grep "^LIBDIR" | sed "s/LIBDIR=\/usr\/lib\///g")
fichier_defaut=fichier
if [ -f "$fichier_defaut" ]; then
   nav=$(cat "$fichier_defaut")
else
   nav=$defaut
fi
echo "Navigateur utilisé par défaut sur cette machine:    $navdefaut"
echo "Navigateur utilisé actuellement pour ce script:     $nav"

echo "Liste des navigateurs présents sur cette machine :"
echo "=============================================="
update-alternatives --list x-www-browser  | sort | uniq | sed "s/\/usr\/bin\///g"
echo "=============================================="
echo
read -p "Choix du nouveau navigateur: " choix
if [ -z "$choix" ]; then
	echo
	echo "Le navigateur utilisé pour le script est toujours le même: $nav"
	echo
else
	sed -i "3cnav=$choix # navigateur choisi pour le script" fichier
	echo
	echo "Le nouveau navigateur utilisé pour le script est: $choix"
	echo
fi
echo "$choix" >"$fichier_defaut"

Peut-être serait-il judicieux de changer le fichier contenant le nom du navigateur en fichier caché...
Il ne reste plus que l'obtention du navigateur par défaut. Quelqu'un a une idée?


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#9 Le 27/04/2016, à 20:05

pingouinux

Re : [Résolu] bash: modification d'un script par lui-même

Il ne reste plus que l'obtention du navigateur par défaut. Quelqu'un a une idée?

Ce n'est pas navdefaut que tu définis au début ?

Hors ligne

#10 Le 27/04/2016, à 20:12

Le Goss

Re : [Résolu] bash: modification d'un script par lui-même

Si, mais j'ai trouvé cette solution en bidouillant... alors qu'il doit exister un moyen plus orthodoxe...


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#11 Le 27/04/2016, à 20:21

Postmortem

Re : [Résolu] bash: modification d'un script par lui-même

Salut,
C'est pas beau ça :

navdefaut=$(cat /etc/alternatives/x-www-browser | grep "^LIBDIR" | sed "s/LIBDIR=\/usr\/lib\///g")

"cat | grep | sed", ça se fait en un seul sed :

navdefaut=$(sed -n '/^LIBDIR/ s#LIBDIR=/usr/lib/##gp' /etc/alternatives/x-www-browser)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 27/04/2016, à 20:33

pingouinux

Re : [Résolu] bash: modification d'un script par lui-même

À la quatrième ligne de ton script en #8

fichier_defaut=fichier

tu devrais mettre le chemin complet de fichier.

Hors ligne

#13 Le 27/04/2016, à 21:20

Le Goss

Re : [Résolu] bash: modification d'un script par lui-même

Postmortem a écrit :

Salut,
C'est pas beau ça :

navdefaut=$(cat /etc/alternatives/x-www-browser | grep "^LIBDIR" | sed "s/LIBDIR=\/usr\/lib\///g")

C'est bien ce que je disais lol
Donc, il n'y a vraiment pas plus simple pour avoir le navigateur par défaut.
Ok pour le chemin complet du fichier.

Merci à tous pour votre aide.
Sujet résolu.


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne