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: p> Je veux déplacer l'affectation de 2 env Var dans une bash script et utilisez une commande comme ceci: p> setparams.sh strong> p> Qu'est-ce qui ne va pas ici? Pourquoi les Vares ne sont pas en cours de réglage? P> P>
3 Réponses :
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 aussi, au lieu d'exécuter que vous devriez appeler
Vous devez exporter vos variables d'environnement:
Test: P> firstparam
Puisque vous passez "$ @" se développe à la liste des arguments que vous avez transmis au script. p> 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 em>, mais pas par des commandes ultérieures. P> Si vous vouliez exécuter plus qu'une commande avec ces variables d'environnement, vous pouvez faire: p> alors Si vous souhaitez qu'un script définit des variables d'environnement disponibles dans votre shell interactif, vous devrez l'invoquer avec my_binary code> 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: p>
$ env_1 code> et
$ env_2 code> apparaîtra dans L'environnement de
Certain_command code> et
quelque_other_command code> - mais pas strong> dans l'environnement de votre shell après
set_params.sh code> finitions. P>
. ./set_params.sh code> ou
source ./set_params.sh code>. (Et dans ce cas, vous n'avez pas besoin du
#! / Bin / bash code> en haut, car il sera exécuté dans votre coquille actuelle.) P> p>
Bien que je parlais d'env Vares, je voulais juste définir des variables pour la commande ultérieure.
La commande de travail est syntaxtique i>; 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 code> 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 $" code>.
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
"$ @" code> plutôt que
"1 $ 1" code> 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 code> Les variables sont transmises sous forme de variables d'environnement sur
my_binary code> (mais ils ne persistent pas après cela).
Désolé, j'aurais dû être plus clair. Dans
setparams.sh code>, 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.