0

Possible Duplicate:
How can I make variables “exported” in a bash script stick around?

I have a problem with executing script from file. When I type in command line

PATH=$PATH:/home/

then PATH is changed appropriately. But when I execute this file :

#!/bin/sh
#provided by me

PATH=$PATH:/home/
echo "done"
exit 0

done is printed but PATH is not changed. Why is this happening ?

Patryk
  • 14,096

1 Answers1

6

Environmental variable changes apply to the current process and any subsequent children, but not to parent processes. So if you run a script, it cannot affect the environmental variables of the shell that ran it. You need to source the script using the . shell builtin. I.e.

. /path/to/script

This causes the current shell to execute the commands in the file instead of running a subprocess.

Kyle Jones
  • 15,015
  • Can you tell me exactly how should I do this since now I am writing my script, putting it in /etc/init.d/ and running update-rc.d myScriptName defaults. Or in other words: is there better way to permanently change $PATH ? – Patryk Feb 21 '12 at 00:19
  • 2
    Set PATH in /etc/profile. This will affect sh, ksh and bash users. /etc/zprofile is the file to use for zsh users. – Kyle Jones Feb 21 '12 at 00:41
  • I have tried source and . but it logs me off from chell. Why is this happening ? – Patryk Feb 21 '12 at 13:09
  • 1
    Remove the exit 0 from the script. It is telling your shell to exit, which is not what you want. – Kyle Jones Feb 21 '12 at 17:29