[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash: initialiser environnement particulier



Bonjour,


Jérémy Prego, par un beau matin d'été :
> j'aimerai parfois lancer un bash avec d'autres variables que
> celle défini par défaut par exemple au lancement d'un bash,
> exporter la variable http_proxy ou encore la variable TZ. par
> contre, faut que se soit juste sur le bash que j'ai choisi.
> j'ai bien essayé de mettre des arguments au lancement de bash
> par exemple, /bin/bash && export
> http_proxy=xx.xx.xx.x.xx:3128/ mais ça ne semble pas
> fonctionné comme ça.
>
> faut-il que je crée un fichier d'initialisation bash
> alternatif et appelé ce fichier au lancement de mon bash
> particulier ?

Il y a tout plein de façons de faire.  Typiquement, vous pouvez
stocker les variables dans un fichier "~/.proxy.env" avec le
contenu suivant :

	# Mon proxy
	export http_proxy="http://www.example.org:3128";
	export https_proxy="${http_proxy}"
	echo "Proxy ${http_proxy} actif"

Fichier que vous pouvez ensuite charger dans votre session Bash
courante avec la commande "source" :

	$ source ~/.proxy.env
	Proxy http://www.example.org:3128 actif
	$ echo $http_proxy
	http://www.example.org:3128

Mais je ferais probablement différemment, abuser de "source"
peut entraîner des complications le jour où on voudrait changer
de shell.

> comment feriez vous ? :)

J'appellerais un shell dans une session particulière via un
script dont la première partie est de régler l'environnement, et
la seconde est d'appeler le shell, qui héritera de ces variables
avec leurs valeurs.  En admettant que le script en question soit
"~/bin/bashweb" et que "~/bin" soit dans votre path, le contenu
serait :

	#! /bin/bash
	set -e
	# mon proxy
	export http_proxy="http://www.example.org:3128";
	export https_proxy="${http_proxy}"
	# affichage du témoin d'activité
	PS1="[proxy actif] ${PS1}"
	# passer les arguments et laisser la main à la session
	# de shell Bash interactive
	exec bash "$@"

Je lancerais "bashweb" et j'aurais une session dédiée aux
activités nécessitant un accès au web, que je pourrais quitter
pour revenir en mode normal simplement en tapant "exit" :

	$ env | grep http
	$ bashweb
	[proxy actif] $ env | grep http
	https_proxy=http://www.example.org:3128
	http_proxy=http://www.example.org:3128
	[proxy actif] $ exit
	$ env | grep http
	$ _

Notez, le bricolage avec le prompt fonctionne tant que la
variable PS1 n'est pas écrasée dans "~/.bashrc".

Ce qui est bien, c'est que vous pouvez lancer n'importe quoi
dans votre script et pas seulement Bash ; par exemple il est
possible de lancer une session Octave, un navigateur, une « Wine
bottle », n'importe quel programme qui tire une partie de sa
configuration depuis les variables d'environnement.

Attention a ce que le script ne s'appelle pas accidentellement
lui-même, sinon Bash va boucler, en redémarrant le dit script
indéfiniment.


Sinon, ces genres de petits raccourcis restent envisageable :

	alias set-proxy='
		export http_proxy="http://www.example.org:3128";
		export https_proxy="http://www.example.org:3128";
	'
	alias unset-proxy='
		unset http_proxy https_proxy
	'

> debian testing.

Debian Sid...  ;)


Amicalement,
-- 
Étienne Mollier <etienne.mollier@mailoo.org>



Reply to: