Question

Je suis nouveau pour baster des scripts shell et je suis tombé sur un défi.Je sais que je peux recharger mon fichier ".profile" en faisant juste:

. .profile

Mais j'essaie d'exécuter la même chose dans un script de bash que j'écris et que cela ne fonctionne pas. Des idées?Quelque chose d'autre que je peux fournir pour clarifier?

merci

Était-ce utile?

La solution

Essayez ceci pour recharger votre shell actuel:

source ~/.profile

Autres conseils

Essayez ceci:

cd 
source .bash_profile

Quelques problèmes surviennent lors de la tentative de rechargement / source ~ / .profile. [Ceci fait référence à Ubuntu Linux - Dans certains cas, les détails des commandes seront différents]

  1. exécutez-vous cela directement dans le terminal ou dans un script?
  2. Comment exécutez-vous cela dans un script?
  3. ad. 1)

    En cours d'exécution directement dans la borne signifie qu'il n'y aura pas de sous-vase créé. Vous pouvez donc utiliser deux commandes:

    source ~/.bash_profile
    

    ou

    . ~/.bash_profile
    

    Dans les deux cas, cela mettra à jour l'environnement avec le contenu du fichier .profile.

    AD 2) Vous pouvez démarrer 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 ne sera visible qu'au processus de sous-cours. Après avoir terminé la commande SUBSHELL, aucune des exportations, etc. ne sera pas appliquée. C'est une erreur commune et provoque beaucoup de développeurs de perdre beaucoup de temps.

    Pour que vos modifications appliquées dans votre script aient effet pour l'environnement global, le script doit être exécuté avec

    .myscript.sh
    

    commande.

    Pour vous assurer que votre script n'est pas exécuté dans un sous-groupe, vous pouvez utiliser cette fonction. (Encore une fois l'exemple est pour la coquille Ubuntu)

    #/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 courants! :RÉ Bonne chance!

Le script Bash fonctionne dans un sous-vase séparé.Afin de faire ce travail, vous devrez également provoquer cet autre script.

Essayez:

#!/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 "$@"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top