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 07/05/2012, à 16:52

Hibou57

[SH] Équivalent de $_ENV pour sh / bash ?

Kikou les gens,

Existe‑t‑il un équivalent de $_ENV du PHP, mais pour sh / bash ? Ou dit d’une autre manière, un moyen d’accéder en lecture ou écriture, à une variable d’environnement, dont le nom celui lui‑même une variable. Je me disais qu’un tableau des variables d’environnement était la chose la plus évidente, mais après tout, il y a peut‑être aussi une autre manière, comme par exemple un commande qui permet de lire ou écrire une variable d’environnement, en prenant son nom en paramètre.

Dernière modification par Hibou57 (Le 01/06/2012, à 01:16)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne

#2 Le 07/05/2012, à 17:31

Zakhar

Re : [SH] Équivalent de $_ENV pour sh / bash ?

Eh bien oui, toutes les variables d'environnement sont accessibles (en lecture) avec simplement leur nom.

Tu peux écrire dans la variable, mais ça ne sera valable que pour le script qui a écrit (et des descendants si tu exportes), mais ne modifiera en aucune manière les variables de l'appelant.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#3 Le 07/05/2012, à 18:03

Hibou57

Re : [SH] Équivalent de $_ENV pour sh / bash ?

Mais existe‑t‑il un moyen d’y accéder par référence indirecte ?

Un exemple fictif :

NAME="TRUC";
ENV[$NAME]="CHOSE";

et ensuite

echo $TRUC;

afficherait

CHOSE

Avec la commande env ça ne marche pas, parce que ça ne fixe pas la variable dans le shell en court, mais seulement dans un nouvel environnement, qui est refermé aussitôt que la commande env retourne au shell appelant.

Dernière modification par Hibou57 (Le 07/05/2012, à 18:04)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne

#4 Le 07/05/2012, à 19:02

Hizoka

Re : [SH] Équivalent de $_ENV pour sh / bash ?

Je ne sais pas si c'est que tu veux :

var=oui
oui="ca va ?"
echo ${!var}

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 07/05/2012, à 20:27

Zakhar

Re : [SH] Équivalent de $_ENV pour sh / bash ?

Ce qui est un "bashism". tongue

https://wiki.ubuntu.com/DashAsBinSh

Si tu veux un truc qui marche même si le shell n'est pas bash, ce qui est le cas du shell standard Ubuntu qui est dash depuis pas mal de versions... il faut modifier un peu

var=oui
oui="ca va ?"
eval 'echo ${'${var}'}'

Cette version de code là marche avec bash ET avec dash (pas celle d'Hizo qui ne marche pas avec dash, le shell standard !)

Cependant, si tu es sûr que le shell utilisé sera bash, le "bashism" indiqué par Hizo est plus rapide. A toi de voir !


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#6 Le 07/05/2012, à 22:10

AnsuzPeorth

Re : [SH] Équivalent de $_ENV pour sh / bash ?

ce qui est le cas du shell standard Ubuntu qui est dash

Pourtant

echo $SHELL
/bin/bash

Que ce soit en console ou tty. (ubuntu 10.4)

Et dash remplace sh, pas bash (enfin en regardant les fichiers dans bin ...)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#7 Le 07/05/2012, à 23:36

Zakhar

Re : [SH] Équivalent de $_ENV pour sh / bash ?

Je me suis mal exprimé ! tongue

Oui, le shell standard dans le terminal est bien bash !

Mais je présume que le monsieur qui pose la question ne veut pas passer son temps à taper des commande dans le terminal, et qu'au contraire il souhaite "écrire un script" qu'il lancera.

Dans ces conditions, la convention veut qu'on commence le script par :

#! /bin/sh

Or, comme vous l'avez remarqué, il n'y a aucun moteur de script qui d'appelle juste "sh" !
Il y a :
bash
dash
ksh
...

Et si on fait simplement :

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2011-02-26 23:52 /bin/sh -> dash

Ce qui signifie bien que le "shell par défaut" d'Ubuntu, c'est à dire par exemple celui qui sert dans tous les scripts de démarrage, est bien dash... et non pas bash !

Et donc il est incorrect de dire "dash remplace sh" puisqu'il n'y a pas à proprement parler de moteur de script sh. En réalité, lorsqu'on met le shebang standard, ça veut dire pour le linux/unix/posix/etc sur lequel on tourne : "utilise ton moteur de script par défaut".

Et si le monsieur écrit un script en mettant le shebang standard, et espère que ce sera le plus portable possible, il faut s'attendre à ce que ça puisse marcher au moins avec dash sur Ubuntu.

Bien sûr, on peut toujours faire un script spécifique pour bash, et dans ce cas là on écrit au début

#! /bin/bash

Il faut savoir cependant que bash est bien plus lent que dash pour pas mal de choses, et n'est pas forcément présent partout.

Après... c'est vous de voir. big_smile

Dernière modification par Zakhar (Le 07/05/2012, à 23:41)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#8 Le 08/05/2012, à 00:35

twocats

Re : [SH] Équivalent de $_ENV pour sh / bash ?

#! /bin/sh

Pourquoi un espace ???
Et si tu tu veux invoquer bash avec un maximum de compatibilité je crois que :

#!/usr/bin/env bash

est préférable.


La réponse est 42

Hors ligne

#9 Le 08/05/2012, à 00:51

Hibou57

Re : [SH] Équivalent de $_ENV pour sh / bash ?

Bonsoir les Jaques Ouilles et les Godefroy Montmiraille,

Il y a foule, je n’y croit point. Je repassois plus tard pour digérer toutes ces suggestions.


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne

#10 Le 08/05/2012, à 14:31

Zakhar

Re : [SH] Équivalent de $_ENV pour sh / bash ?

twocats a écrit :
#! /bin/sh

Pourquoi un espace ???

La réponse est là : http://homepages.cwi.nl/~aeb/std/hashex … html#ss1.4

L'espace est bien optionnel, cependant, le manuel GNU autoconf dit que la ligne doit commencer par les 4 caractères "#! /"

Bien qu'il semblerait que ce soit une "rumeur"... pour le cas où ce serait vraiment appliqué sur certains systèmes, ça ne mange pas de pain de mettre l'espace : ça assure que ça marche sur ces systèmes là, et sur les autres, l'espace étant optionnel, ça marche aussi !


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne