Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reload .profile in bash shell script (in unix)?

People also ask

How do I run a .profile file in Unix?

Just edit the . bashrc file (better make a copy of the original first, just in case) and simply add a line the name of the script you want to execute to the file (at the bottom of the . bashrc would be fine). If the script is not in your home directory, be sure to specify the complete path.

How do I reload the current shell in Linux?

How to reload your bash shell? in your ~/. bash_aliases file, you can simply use exec bash which will replace your current shell image with a new one, loading your configuration file and allowing you to use your updated aliases in your current terminal.


Try this to reload your current shell:

source ~/.profile

Try this:

cd 
source .bash_profile

A couple of issues arise when trying to reload/source ~/.profile file. [This refers to Ubuntu linux - in some cases the details of the commands will be different]

  1. Are you running this directly in terminal or in a script?
  2. How do you run this in a script?

Ad. 1)

Running this directly in terminal means that there will be no subshell created. So you can use either two commands:

source ~/.bash_profile

or

. ~/.bash_profile

In both cases this will update the environment with the contents of .profile file.

Ad 2) You can start any bash script either by calling

sh myscript.sh 

or

. myscript.sh

In the first case this will create a subshell that will not affect the environment variables of your system and they will be visible only to the subshell process. After finishing the subshell command none of the exports etc. will not be applied. THIS IS A COMMON MISTAKE AND CAUSES A LOT OF DEVELOPERS TO LOSE A LOT OF TIME.

In order for your changes applied in your script to have effect for the global environment the script has to be run with

.myscript.sh

command.

In order to make sure that you script is not runned in a subshel you can use this function. (Again example is for 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
}

I hope this clears some of the common misunderstandings! :D Good Luck!


The bash script runs in a separate subshell. In order to make this work you will need to source this other script as well.


Try:

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