111 votes

Shell script pour définir les variables d'environnement

Je souhaite écrire un shell script pour exporter des variables.

J'ai listé ci-dessous le script .

echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH='/home/linux/Practise/linux-devkit/bin/:$PATH';
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-';
echo "Export CROSS_COMPILE done"

Mais cela ne semble pas fonctionner correctement. Je dois exécuter individuellement les commandes à l'invite du shell.

285voto

mbaird Points 3729

Vous devez exécuter le script en tant que source ou le raccourci .

source ./myscript.sh

o

. ./myscript.sh

Ceci s'exécutera dans le shell existant, assurant que toutes les variables créées ou modifiées par le script seront disponibles après la fin du script.

L'exécution du script en utilisant simplement le nom du fichier exécutera le script dans un sous-shell séparé.

57voto

konsolebox Points 21338

Veuillez nous montrer plus de parties du script et nous dire quelles commandes vous avez dû exécuter individuellement et que vous voulez simplement.

Par ailleurs, vous devez utiliser des guillemets doubles et non des guillemets simples pour développer les variables :

export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"

Les points-virgules à la fin d'une seule commande sont également inutiles.

Jusqu'à présent :

#!/bin/sh
echo "Perform Operation in su mode"
export ARCH=arm
echo "Export ARCH=arm Executed"
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
echo "Export path done"
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...

Pour su avec lequel vous pouvez l'exécuter :

su -c 'sh /path/to/script.sh'

Note : Le PO ne demandait pas explicitement des étapes sur la façon de créer des variables d'exportation dans un shell interactif en utilisant un script. Il a seulement demandé que son script soit évalué au maximum. Il n'a pas mentionné de détails sur la façon dont son script serait utilisé. Cela aurait pu être en utilisant . o source à partir du shell interactif. Cela aurait pu être un scipt autonome, ou cela aurait pu être source d'un autre script. Les variables d'environnement ne sont pas spécifiques aux shells interactifs. Cette réponse a résolu son problème.

4voto

Anurag Mondal Points 37

Exécutez le script en tant que source= pour l'exécuter également en mode débogage.

source= ./myscript.sh

0voto

Chetabahana Points 3161

Je ne peux pas le résoudre avec source ./myscript.sh . Il dit l'erreur source non trouvée.
Échec également lors de l'utilisation de . ./myscript.sh . Il donne ne peut pas ouvrir myscript.sh.

Donc mon option est de le mettre dans un fichier texte qui sera appelé dans le prochain script.

#!/bin/sh
echo "Perform Operation in su mode"
echo "ARCH=arm" >> environment.txt
echo "Export ARCH=arm Executed"
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
echo "Export path done"
export "CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -?" >> environment.txt
echo "Export CROSS_COMPILE done"
# continue your compilation commands here
...

Tnen l'appelle chaque fois que c'est nécessaire :

while read -r line; do
    line=$(sed -e 's/[[:space:]]*$//' <<<${line})
    var=`echo $line | cut -d '=' -f1`; test=$(echo $var)
    if [ -z "$(test)" ];then eval export "$line";fi
done <environment.txt

0voto

vagdevi k Points 81

Dans mon cas, j'ai donné des espaces supplémentaires avant et après = . Par exemple, dans mon fichier shell (disons deploy.sh )

J'écris initialement

GIT_SHA = $(git rev-parse HEAD)

Mais je l'ai réparé en utilisant :

GIT_SHA=$(git rev-parse HEAD)

Donc, veuillez noter que nous ne devrions pas donner d'espaces avant et après l'expression = .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X