#1 Le 27/04/2016, à 17: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, à 20: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 52 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 - markdown
Hors ligne
#2 Le 27/04/2016, à 17: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, à 17: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 52 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 - markdown
Hors ligne
#4 Le 27/04/2016, à 17: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, à 17: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 52 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 - markdown
Hors ligne
#6 Le 27/04/2016, à 18: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, à 18:07)
Hors ligne
#7 Le 27/04/2016, à 18: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, à 18: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 52 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 - markdown
Hors ligne
#9 Le 27/04/2016, à 19: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, à 19: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 52 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 - markdown
Hors ligne
#11 Le 27/04/2016, à 19: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, à 19: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, à 20:20
- Le Goss
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")
C'est bien ce que je disais
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 52 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 - markdown
Hors ligne