zihaoyu zihaoyu - 1 month ago 5x
Bash Question

what is the difference between "./somescript.sh" and ". ./somescript.sh"

This question may sounds silly to you. Today I was following some instructions to install a software in Linux. There was a script that needs to be run first. It set some environment variables.

The instruction told me to execute

. ./setup.sh
, but I made a mistake by executing
. So the env was not set. Finally I noticed this and proceeded.

I want to know what exactly is the difference between both? I am completely new to Linux so please be as elaborate as possible.


./setup.sh runs the script, a new shell will be started that runs the script. That new shell cannot affect the parent shell that started the script.

. ./setup.sh is shorthand for source ./setup.sh and it will run the script in the current shell, not start a new one to run the script. This means the script can alter the behavior of the current shell, e.g. set new environment variables.