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 02/10/2008, à 14: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 sad Une idée?

Dernière modification par Aldian (Le 06/10/2008, à 02:59)

Hors ligne

#2 Le 02/10/2008, à 14: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, à 14:33)

Hors ligne

#3 Le 03/10/2008, à 21: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 sad

Hors ligne

#4 Le 03/10/2008, à 22: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 04/10/2008, à 00:55

Alain.g

Re : [Résolu] définir des alias temporaires le temps d'un script shell

Aldian a écrit :

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, à 05: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 smile.

Hors ligne

#7 Le 05/10/2008, à 20: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, à 20:16)

Hors ligne

#8 Le 05/10/2008, à 20: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 wink


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#9 Le 05/10/2008, à 23:07

nicolas66

Re : [Résolu] définir des alias temporaires le temps d'un script shell

tiky a écrit :

Et pour précision, source n'est pas portable alors que . si wink

Ah tiens j'aurai appris un truc. Merci smile


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#10 Le 05/10/2008, à 23: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, à 23: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 06/10/2008, à 00:13

tiky

Re : [Résolu] définir des alias temporaires le temps d'un script shell

xamaco a écrit :

'.' 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, à 02: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 big_smile

Hors ligne