0
votes

Set env Var dans Bash Script

Je dois admettre que je suis très rouillé avec des scripts Bash. Je veux définir 2 Temp env Vars puis exécuter un binaire.

La commande est comme ceci: xxx

Je veux déplacer l'affectation de 2 env Var dans une bash script et utilisez une commande comme ceci: xxx

setparams.sh xxx

Qu'est-ce qui ne va pas ici? Pourquoi les Vares ne sont pas en cours de réglage?


7 commentaires

La commande de travail est syntaxtique ; Une commande consiste en des modificateurs de pré-commandes optionnels plus la commande réelle. Votre tentative est juste un script qui prend my_binary comme argument et l'ignore, tout en définissant des variables qui disparaîtront à la sortie.


Votre "script" serait juste env_1 = premierparam env_2 = secondparam "1 $" .


Ce que vous avez sont des missions variables. Vous ne travaillez pas du tout avec des variables d'environnement; Les variables que vous avez sont internes à la coquille


@cheppner en utilisant "$ @" plutôt que "1 $ 1" permet de passer des arguments supplémentaires à la commande.


@Williampursell dans la première commande dans la question env_1 = fiateparam env_2 = secondparam my_binary Les variables sont transmises sous forme de variables d'environnement sur my_binary (mais ils ne persistent pas après cela).


Désolé, j'aurais dû être plus clair. Dans setparams.sh , ENV_1 et ENV_2 ne sont pas des variables d'environnement. (À moins qu'ils n'étaient placés dans l'environnement par l'appelant)


@KeithThompson Droite. Je me concentrais sur l'exemple, mais il est clair que le script devrait accueillir des arguments au binaire.


3 Réponses :


3
votes

Par défaut, toutes les variables définies par l'utilisateur sont locales. Ils ne sont pas exportés vers de nouveaux processus. Utilisez la commande export pour exporter des variables et des fonctions xxx

aussi, au lieu d'exécuter que vous devriez appeler source (commande intégrée qui exécute le Contenu du fichier transmis comme argument, dans la coque actuelle): xxx


0 commentaires

0
votes

Vous devez exporter vos variables d'environnement:

setparams.sh strong> p> xxx pré>

Test: P>

firstparam


0 commentaires

3
votes

Puisque vous passez my_binary comme argument sur le script, je suppose que vous souhaitez que le script (a) définit les variables d'environnement puis (b) appelez la commande que vous avez envoyée. < p> Un moyen de faire c'est: xxx

"$ @" se développe à la liste des arguments que vous avez transmis au script.

Si vous définissez Variables comme ça, ils seront hérités dans l'environnement de toute commande que vous exécutez sur la même ligne de commande , mais pas par des commandes ultérieures.

Si vous vouliez exécuter plus qu'une commande avec ces variables d'environnement, vous pouvez faire: xxx

alors $ env_1 et $ env_2 apparaîtra dans L'environnement de Certain_command et quelque_other_command - mais pas dans l'environnement de votre shell après set_params.sh finitions.

Si vous souhaitez qu'un script définit des variables d'environnement disponibles dans votre shell interactif, vous devrez l'invoquer avec . ./set_params.sh ou source ./set_params.sh . (Et dans ce cas, vous n'avez pas besoin du #! / Bin / bash en haut, car il sera exécuté dans votre coquille actuelle.)


1 commentaires

Bien que je parlais d'env Vares, je voulais juste définir des variables pour la commande ultérieure.