I was wondering if the following two ways of running a bash script are equivalent?
. ./myScript.sh source myScript.sh
- Are they both running the content of the script instead of running the script, i.e. not creating a subshell for running the script?
2 Answers
They are equivalent in bash in that they do exactly the same thing. On the other hand,
source
is 5 characters longer and is not portable to POSIX-only shells or Bourne whereas.
(dot) is, so I never bother usingsource
.That is correct - sourcing a file runs the commands in the current shell and it will affect your current shell environment. You can still pass arguments to the sourced file and bash will actually look in
$PATH
for the file name just like a normal command if it doesn't contain any slashes.
Not related to the original question of .
vs source
, but in your example,
. ./myScript.sh
is not identical to
source myScript.sh
because while .
and source
are functionally identical, myScript.sh
and ./myScript.sh
are not the same. Since ./myScript.sh
contains a slash, it's interpreted as a path and the shell just uses ./myScript.sh
. However, myScript.sh
does not have a slash so the shell does a $PATH
search for it first. This is the POSIX specified standard behavior for .
. Most shells default to this although they may add extensions (such as searching in the current working directory after the path search) or options to change the behavior of .
/source
.

- 51,212
-
2the behavior when the provided path of the file doesn't contain a
/
is shell-dependent and forbash
andzsh
depends on whether the POSIX mode is enabled or not. Also note that in many ksh implementations,.
behaves differently fromsource
. – Stéphane Chazelas Dec 14 '12 at 20:12 -
@StephaneChazelas Yes, you are right. I added a note to clarify that it the above description is of the POSIX standard. – jw013 Dec 14 '12 at 20:21
Yes, they are equivalent. There is no functional difference; .
is just a builtin synonym for source
.
(Edit: Apparently this is only true for bash
and zsh
. Some lighter shells don't have source
, only .
is specified by POSIX so ksh
, dash
, ash
, etc. may not have source
. See jw013's answer for info.)
-
-
That is they are both builtins and the alias is builtin too. This is documented, but I guess 'synonym' is the right term in this case, not 'alias'. – Caleb Aug 01 '11 at 17:00
man .
,man source
or whatever I haven't know yet. – Tim Aug 01 '11 at 18:39type .
andhelp .
– rozcietrzewiacz Aug 01 '11 at 18:43man $SHELL
,/source
– alex Aug 01 '11 at 20:42