#1 Le 02/10/2008, à 13:13
- Aldian
[Résolu] définir des alias temporaires le temps d'un script shell
Bonjour
Je souhaite faire un scritp shell qui va définir des allias, les utiliser, puis remettre le système dans son état d'origine en fin d'exécution. Le problème est que comme chaque ligne du script s'exécute dans un shell séparé, je ne peux pas me contenter de déclarer des allias temporaires, vu que ceux ci ne seront valables que le temps de leur sous-shell propre et pas pour l'ensemble du script.
Je me suis donc tourné vers la solution suivante:
1) sauvegarder le fichier .bashrc
2) y ajouter les alias dont j'ai besoin
3) le recharger dans le shell en cours
4) exécuter le reste du script
5) restaurer le .bashrc initial en fin de script.
Mais pour une raison inconnue, la commande source semble ne pas fonctionner dans un shell:
Exemple tout bête:
#!/bin/bash
#01/10/09 23:27
#
#EXEMPLE EXECUTION
#aldian@ubuntu:~/bin$ sh test_005.sh
#test 005 ON
#présent
#test_005.sh: 5: source: not found
cd
echo "test 005 ON"
test -f .bashrc && echo "présent"
source .bashrc
pourtant en ligne de commande ça marche très bien Une idée?
Dernière modification par Aldian (Le 06/10/2008, à 01:59)
Hors ligne
#2 Le 02/10/2008, à 13:33
- ®om
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Oulà, c'est tordu et pas très fiable (quand j'exécute un script, je voudrais pas qu'il modifie mes fichiers perso).
Utilise des fonctions sans paramètre, ça fera comme des alias :
dis_bonjour() {
echo bonjour;
}
dis_bonjour
Dernière modification par ®om (Le 02/10/2008, à 13:33)
Hors ligne
#3 Le 03/10/2008, à 20:42
- Aldian
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Merci de votre réponse, je l'ai testée et elle m'est bien utile. Cependant le truc de la fonction ne fonctionne pas pour les noms avec un trait d'union dedans. Et rien n'explique pourquoi source ne marche pas dans mes scripts
Hors ligne
#4 Le 03/10/2008, à 21:44
- tiky
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Ta première solution est d'autant plus mauvaise que si tu lances le script 2x en même temps, le second va sauvegarder le bashrc modifié par le premier et le restaurer à la fin. Tu te retrouveras alors avec un bashrc modifié définitivement. Pourquoi veux-tu des traits d'union?
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#5 Le 03/10/2008, à 23:55
- Alain.g
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Cependant le truc de la fonction ne fonctionne pas pour les noms avec un trait d'union dedans.(
Bonsoir
Tu peux utiliser le tiret bas (_) à la place
Xubuntu Karmic !
Hors ligne
#6 Le 04/10/2008, à 04:13
- Aldian
Re : [Résolu] définir des alias temporaires le temps d'un script shell
non en fait je voulais utiliser des alias pour surcharger des commandes systèmes genre apt-get en les remplaçant par des commandes adaptées à mes préférences dans des scripts que je n'ai pas créé. Mais c'est pas grave, je ferais autrement, merci de vos conseils & explications .
Hors ligne
#7 Le 05/10/2008, à 19:15
- xamaco
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Si tu fais précéder ton script par un . ou par souce, il va s'executer dans le même shell.
Pour être plus clair, si le script que tu executes précédé par un . ou source modifie/crée des variables ou des alias, ces modifications/créations vont affecter ton shell de départ.
Example 1:
1) Créer un script qui modifie/crée un alias
alias zob='ls -l'
Si le script s'appelle disons x.sh, depuis bash si tu tapes :
. x.sh
ou
source x.sh
Tu auras un nouvel alias nommé zob dans ton bash de départ.
En gros, pas besoin de modifier .bashrc
Xavier
Dernière modification par xamaco (Le 05/10/2008, à 19:16)
Hors ligne
#8 Le 05/10/2008, à 19:17
- tiky
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Et pour précision, source n'est pas portable alors que . si
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#9 Le 05/10/2008, à 22:07
- nicolas66
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Et pour précision, source n'est pas portable alors que . si
Ah tiens j'aurai appris un truc. Merci
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#10 Le 05/10/2008, à 22:20
- tiky
Re : [Résolu] définir des alias temporaires le temps d'un script shell
Moi aussi je le sais depuis peu:
http://www.bash-hackers.org/wiki/doku.php/scripting/obsolete
http://www.bash-hackers.org/wiki/doku.php/scripting/nonportable
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#11 Le 05/10/2008, à 22:52
- xamaco
Re : [Résolu] définir des alias temporaires le temps d'un script shell
'.' fonctionnerait sur tout shell basé sur Bourne (dont bash)
'source' ne marcherait que dans bash
Personellement je n'ai jamais utilisé que '.'
Hors ligne
#12 Le 05/10/2008, à 23:13
- tiky
Re : [Résolu] définir des alias temporaires le temps d'un script shell
'.' fonctionnerait sur tout shell basé sur Bourne (dont bash)
'source' ne marcherait que dans bash
Personellement je n'ai jamais utilisé que '.'
C'est ce que je dis... il est portable.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#13 Le 06/10/2008, à 01:59
- Aldian
Re : [Résolu] définir des alias temporaires le temps d'un script shell
La suggestion de xamaco a résolu mon problème. Merci beaucoup à tous pour les précisions supplémentaires
Hors ligne