source command not found in sh shell

BashShellSh

Bash Problem Overview


I have a script that uses sh shell. I get an error in the line that uses the source command. It seems source is not included in my sh shell.

If I explicitly try to run source from shell I get:

sh: 1: source: not found

Should I somehow install "source"? Do I have a wrong version of sh?

Bash Solutions


Solution 1 - Bash

/bin/sh is usually some other shell trying to mimic The Shell. Many distributions use /bin/bash for sh, it supports source. On Ubuntu, though, /bin/dash is used which does not support source. Most shells use . instead of source. If you cannot edit the script, try to change the shell which runs it.

Solution 2 - Bash

In Bourne shell(sh), use the . command to source a file

. filename

In certain OS's/environments (Mac OS, Travis-CI, Ubuntu, at least) this must be:

. ./filename

(Credit to Adrien Joly's comment below)

Solution 3 - Bash

$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash

Then it will be OK

Solution 4 - Bash

The source builtin is a bashism. Write this simply as . instead.

e.g.

. $FILE

# OR you may need to use a relative path (such as in an `npm` script):

. ./$FILE

> https://wiki.ubuntu.com/DashAsBinSh#source

Solution 5 - Bash

This problem happens because jenkins Execute Shell runs the script via its /bin/sh

Consequently, /bin/sh does not know "source"

You just need to add the below line at the top of your Execute Shell in jenkins

#!/bin/bash

Solution 6 - Bash

I faced this error while i was trying to call source command from #Jenkins execute shell.

source profile.txt or source profile.properties

Replacement for source command is to use,

. ./profile.txt or . ./profile.properties

Note: There is a space between the two dots(.)

Solution 7 - Bash

The source command is built into some shells. If you have a script, it should specify what shell to use on the first line, such as:

#!/bin/bash

Solution 8 - Bash

I found in a gnu Makefile on Ubuntu, (where /bin/sh -> bash)

I needed to use the . command, as well as specify the target script with a ./ prefix (see example below)

source did not work in this instance, not sure why since it should be calling /bin/bash..

My SHELL environment variable is also set to /bin/bash

test:
    $(shell . ./my_script)

Note this sample does not include the tab character; had to format for stack exchange.

Solution 9 - Bash

source is a bash built-in command so to execute source command, you can log in as Root.

sudo -s source ./filename.sh

Solution 10 - Bash

On Ubuntu, instead of using sh scriptname.sh to run the file, I've used . scriptname.sh and it worked! The first line of my file contains: #!/bin/bash

use this command to run the script

.name_of_script.sh

Solution 11 - Bash

This may help you, I was getting this error because I was trying to reload my .profile with the command . .profile and it had a syntax error

Solution 12 - Bash

Bourne shell (sh) uses PATH to locate in source <file>. If the file you are trying to source is not in your path, you get the error 'file not found'.

Try:

source ./<filename>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMiladView Question on Stackoverflow
Solution 1 - BashchorobaView Answer on Stackoverflow
Solution 2 - BashGuruView Answer on Stackoverflow
Solution 3 - BashshlsyView Answer on Stackoverflow
Solution 4 - BashTravis ClarkeView Answer on Stackoverflow
Solution 5 - BashMojtaba YousefiView Answer on Stackoverflow
Solution 6 - BashGangaRam DewasiView Answer on Stackoverflow
Solution 7 - BashmahView Answer on Stackoverflow
Solution 8 - BashGord WaitView Answer on Stackoverflow
Solution 9 - Bashswati jainView Answer on Stackoverflow
Solution 10 - BashDInfo2019View Answer on Stackoverflow
Solution 11 - BashKellen StuartView Answer on Stackoverflow
Solution 12 - BashmosuView Answer on Stackoverflow