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 01/07/2014, à 18:47

Arbiel

Quelle est la signification de "env=C" devant une commande

Bonsoir à tous

J'essaie d'adapter un script dans lequel je trouve la commande suivante

env=C xinput list --short

Merci d'avance à qui voudra bien m'indiquer ce que ce "env=C" signifie.

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#2 Le 01/07/2014, à 19:46

Zakhar

Re : Quelle est la signification de "env=C" devant une commande

Je connais :

LANG=C

... qui en quelque sorte "met à zéro" (valeur par défaut) ta variable de langue qui fait que ta sortie va être en Français et en UTF-8 (ou ce que tu as paramétré). Donc avec ça, tes sorties seront en basique anglais/ASCII.

Dans un script, si tu traites des chaînes de caractères issues de commandes, tu as parfois intérêt à faire ça pour être sûr que ton script ne plante pas à cause d'une commande traduite dans une locale.

env=C ne semble cependant pas modifier la langue (je viens de tester)... mais j'imagine bien un effet "normalisateur" de la même veine.

Si tu trouves la réponse ça m'intéresse. smile


Exemple :

MAUVAIS !...

if diff -s file1 file2 | grep -q identique; then echo "Files are Identical"; fi

BON !...

if LANG=C diff -s file1 file2 | grep -q identical; then echo "Identical"; fi

Le premier code qui compare file1 et file2 et écrit "Files are identical" si les fichiers sont identiques ne fonctionnera que dans une locale française, et échouera lamentablement dans d'autres langues.

Le deuxième code fait la même chose mais fonctionne dans toutes les langues.

C'est bien sûr un cas fictif... en l'occurrence si tu veux faire ça de façon fiable il suffit de tester le code retour du diff (pas besoin de grep), c'était juste pour illustrer.

Dernière modification par Zakhar (Le 01/07/2014, à 19:52)


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

Hors ligne

#3 Le 01/07/2014, à 23:46

ssdg

Re : Quelle est la signification de "env=C" devant une commande

cette "structure" permet de changer la valeur d'une variable d'environnement pour la commande qui suit.

Par exemple:
bash -c "qqch" est une façon de lancer l'interpreteur de shell en lui faisant executer quelque chose.

Tu connais sans doute déjà des choses comme echo $HOME (chez moi, c'est /home/ssdg)

et bien la commande (le \ est là pour que le $HOME ne soit pas remplacé avant l'execution de bash):
HOME="vive l'amour" bash -c "echo \$HOME"
affiche "vive l'amour"

Et si on lance juste "bash", il se met à avoir un comportement étrange. (forcément, "vive l'amour" n'est pas un répertoire valide mais une très bonne chanson de François Pérusse)


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#4 Le 01/07/2014, à 23:55

Zakhar

Re : Quelle est la signification de "env=C" devant une commande

Ah oui, tu expliques à partir de 0. tongue

Je présumais qu'Arbiel savait qu'en mettant une affectation avant une commande ça revenait à modifier/créer la variable d'environnement juste pour cette commande (ce que tu expliques) et qu'il demandait plutôt si "env=C" avait une signification précise connue (en dehors de changer/setter cette variable là).

Mais si ça se trouve, effectivement, il s'intéressait juste à la construction :

var=foo command

... et donc là tu as expliqué. big_smile


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

Hors ligne

#5 Le 06/07/2014, à 17:45

Arbiel

Re : Quelle est la signification de "env=C" devant une commande

Bonjour

1) Non, je ne savais pas que l'initialisation d'une variable d'environnement pouvait se faire sans le recours à la commande env. Pour moi, la manière de faire était la suivante

man env a écrit :

NAME
       env - run a program in a modified environment

SYNOPSIS
       env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

DESCRIPTION
       Set each NAME to VALUE in the environment and run COMMAND.

J'ai bien vu la commande de Zakhar

if LANG=C diff -s file1 file2 | grep -q identical; then echo "Identical"; fi

qui montre que "env" serait facultatif.

2) Par ailleurs "env" n'est pas, à ma connaissance, une variable d'environnement, toutes les variables d'environnement étant en majuscules. Dans la commande,

env=C xinput list --short

env n'est ni la commande env dont je parle en 1, ni une variable d'environnement.

Donc je pose à nouveau ma question : que signifie "env=C", qui me semble tout à fait différent de LANG=C ?

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#6 Le 07/07/2014, à 00:43

Zakhar

Re : Quelle est la signification de "env=C" devant une commande

Non, une variable d'environnement tu la mets en minuscule si tu veux. C'est juste pas convention qu'on met souvent des majuscules, pour éviter de les confondre avec des commandes, qui elle, sont par convention en minuscule.


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

Hors ligne