Le Sat, 13 Apr 2013 00:51:02 -0400 John Chludzinski a écrit: Hi,
> I have a file mpi.ksh > > #!/bin/mksh > export PATH=/lib64/openmpi/bin/:$PATH > export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib/ > mpiexec -n 1 printenv | grep PATH > > When I execute ./mpi.ksh, I get: > > > PATH=/lib64/openmpi/bin/:/sbin:/usr/lib64/qt-.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:. > LD_LIBRARY_PATH=/usr/lib64/openmpi/lib/ > > ... but after the script has execute and returned: > > > print $PATH > > /sbin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin > > print $LD_LIBRARY_PATH > > Both assignments are gone. I tried: > source mpi.ksh > > > print $PATH > > /sbin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin > > print $LD_LIBRARY_PATH > /usr/lib64/openmpi/lib/ > > This time the assignment to LD_LIBRARY_PATH is there but the > update/assignment to PATH is not. > > What's up? Your script is run as a distinct process and then inherits a *copy* of the environment of the process it is forked from. So, all the changes you make in your script only affect this copy, not the environment of the father-process. If you want to change the environment of the current shell process, you have to source your script: . /mpi.ksh Then, all the commands are executed as if you had entered them manually in the current shell. ++ Seb.
