9

I have created env.sh file the contents of which are below

#!/bin/sh

export M2_HOME=/vagrant/tools/maven
export PATH=$PATH:$M2_HOME/bin
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_65
export ANT_HOME=/usr/local/apache-ant-1.9.7
export MAVEN_HOME=$M2_HOME

but executing this sh file does not result in env variables being exported. Have to manually execute each line to get them exported. Please help

heemayl
  • 56,300
Somasundaram Sekar
  • 193
  • 1
  • 1
  • 4

1 Answers1

19

You need to source (.) the file, not execute:

. env.sh

When you execute the script, it is run in a subshell, and all the parameters exported will go out of scope once the (sub)shell exits, not affecting the parent shell.

When you source it, the parameters will be available on the calling session. And also on the child processes as you are export-ing them.


Note that, the default system shell (sh) for Ubuntu is dash, not bash and gnome-terminal spawns bash as the interactive shell. While executing, make sure the shebang is correct, and desired one. Also while source-ing, no need for the shebang, you can drop it.

heemayl
  • 56,300
  • 3
    To further clarify: export makes a variable available to subprocesses of the shell that it's exported from (i.e. subshells, commands run from that shell, etc). There is no way to push a variable up to the parent process of the shell. Environment variables always flow down the process tree, never up. – Gordon Davisson Sep 27 '16 at 05:11