Domanda

Sono nuovo per colpire lo scripting shell e sono imbattuti in una sfida.So che posso ricaricare il mio file ".profile" semplicemente facendo:

. .profile
.

Ma sto cercando di eseguire lo stesso in uno script bash che sto scrivendo e non funziona. Qualche idea?Qualcos'altro che posso fornire per chiarire?

Grazie

È stato utile?

Soluzione

Prova questo per ricaricare la tua shell corrente:

source ~/.profile
.

Altri suggerimenti

Prova questo:

cd 
source .bash_profile
.

Un paio di problemi sorge quando si tenta di ricaricare / fonte di file ~ / .profile. [Questo si riferisce a Ubuntu Linux - in alcuni casi i dettagli dei comandi saranno diversi]

    .
  1. Stai eseguendolo direttamente in terminale o in uno script?
  2. Come si esegue questo in uno script?
  3. d.C. 1)

    L'esecuzione di questo direttamente nel terminale significa che non ci sarà un subshell creato. Quindi puoi usare due comandi:

    source ~/.bash_profile
    
    .

    o

    . ~/.bash_profile
    
    .

    In entrambi i casi questo aggiornerà l'ambiente con il contenuto del file .profile.

    AD 2) È possibile avviare qualsiasi script Bash chiamando

    sh myscript.sh 
    
    .

    o

    . myscript.sh
    
    .

    Nel primo caso creerà un subshell che non influenzerà le variabili di ambiente del sistema e saranno visibili solo per il processo di sottoschetto. Dopo aver terminato il comando subshell Nessuna delle esportazioni ecc. Non verrà applicata. Questo è un errore comune e causa un sacco di sviluppatori di perdere molto tempo.

    Affinché le tue modifiche applicate nello script abbiano effetto per l'ambiente globale, lo script deve essere eseguito con

    .myscript.sh
    
    .

    Comando.

    Per assicurarsi che lo script non sia stato innestato in un sott'asso successivo è possibile utilizzare questa funzione. (Esempio di nuovo è per 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
    }
    
    .

    Spero che questo chiarisca alcuni dei comuni equivoci! : D. Buona fortuna!

Lo script Bash funziona in un sottovoce separato.Per rendere questo lavoro è necessario originare anche questo altro script.

Prova:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top