Ricarica .profile in Script Shell Bash (in UNIX)?
-
17-09-2020 - |
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
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]
- .
- Stai eseguendolo direttamente in terminale o in uno script?
- Come si esegue questo in uno script?
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 "$@"
.