Je suis novice dans les scripts Shell et j'ai rencontré un défi. Je sais que je peux recharger mon fichier ".profile" simplement en faisant:
. .profile
mais j'essaie d'exécuter la même chose dans un script bash que j'écris et cela ne fonctionne tout simplement pas. Des idées? Quelque chose d'autre que je peux fournir pour clarifier?
Merci
Essayez ceci pour recharger votre shell actuel:
source ~/.profile
Essaye ça:
cd
source .bash_profile
Le script bash s'exécute dans un sous-shell distinct. Afin de faire ce travail, vous aurez besoin de source également cet autre script.
Quelques problèmes se posent lorsque vous essayez de recharger/source le fichier ~/.profile. [Cela concerne Ubuntu linux - dans certains cas, les détails des commandes seront différents]
Un d. 1)
L'exécuter directement dans le terminal signifie qu'aucun sous-shell ne sera créé. Vous pouvez donc utiliser l'une des deux commandes suivantes:
source ~/.bash_profile
ou
. ~/.bash_profile
Dans les deux cas, l'environnement sera mis à jour avec le contenu du fichier .profile.
Ad 2) Vous pouvez lancer n’importe quel script bash en appelant
sh myscript.sh
ou
. myscript.sh
Dans le premier cas, cela créera un sous-shell qui n'affectera pas les variables d'environnement de votre système et celles-ci ne seront visibles que par le processus du sous-shell. Une fois la commande subshell terminée, aucune des exportations, etc. ne sera appliquée. CECI IS UNE ERREUR COMMUNE ET PERMET À BEAUCOUP DE DÉVELOPPEURS DE PERDRE BEAUCOUP DE TEMPS.
Pour que vos modifications appliquées dans votre script aient un effet sur l'environnement global, vous devez exécuter le script avec
.myscript.sh
commander.
Pour vous assurer que votre script n'est pas exécuté dans un sous-marin, vous pouvez utiliser cette fonction. (Encore une fois, l'exemple concerne Ubuntu Shell)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
J'espère que cela efface certains des malentendus communs! : D bonne chance!
Essayer:
#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5 # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"