[clue] env variables

dennisjperkins at comcast.net dennisjperkins at comcast.net
Mon Jun 24 18:17:01 MDT 2013


I wasn't sure if omitting the shebang would prevent a new shell from starting and I didn't have a Linux computer with me. 

I think the kernel looks at the first few bytes when it forks a process, and if it sees #!, it uses the rest of the line to start an interpreter. Otherwise, it's probably the C library. 

I've left out the shebang at times, but only when a bash script was calling a bash subscript that should never be run independently. 
----- Original Message -----
From: "Quentin Hartman" <qhartman at gmail.com> 
To: "Mark G. Harvey" <markgharvey at yahoo.com>, "CLUE's mailing list" <clue at cluedenver.org> 
Sent: Monday, June 24, 2013 5:03:03 PM 
Subject: Re: [clue] env variables 




Just a note that removing the #! statement at the top of the file is usually a bad idea. That doesn't directly start a new shell, that tells the system (not sure if it's bash itself, or if it's a kernel thing) which interpreter to use for the script. You can get weird results if you leave that out and make the script executable. 

It does though create a new subshell as was mentioned, which always happens with script execution (having nothing to do with #!), which is why those env_vars don't show up in the parent shell. In order to get them to show up in the parent shell, you have to source them from the parent shell: 

04:57 PM:qhartman at qhstation$ cat foo.sh 
#!/bin/bash 
export FOO=bar 

CWD:~ 
04:57 PM:qhartman at qhstation$ ./foo.sh 

CWD:~ 
04:57 PM:qhartman at qhstation$ echo $FOO 


CWD:~ 
04:57 PM:qhartman at qhstation$ source foo.sh 

CWD:~ 
04:58 PM:qhartman at qhstation$ echo $FOO 
bar 


If you need to have those vars set outside of the context of the script you are running, you need to add or modify those vars in the appropriate user's login shell config (usually .bashrc), and then the next time that user invokes a shell they will be set how you want. 




On Mon, Jun 24, 2013 at 3:28 PM, Mark G. Harvey < markgharvey at yahoo.com > wrote: 









so removing #!/bin/bash/ at the top of the script to stay within the same shell session doesn't make any detectable difference 


I also added sourcing the file where the variables are set ( # source /etc/profile.d/00_jdk.sh ) 


the variables PATH and JAVA_HOME show up correct when the script is running ... but when finished, the variables are still not changed 




[root at 87148-mondev01 ~]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin ... should be appended with /usr/java/jdk1.7.0_21/bin 

[root at 87148-mondev01 ~]# echo $JAVA_HOME 
... should have an entry /usr/java/jdk1.7.0_21/bin ... but it is blank 








<blockquote>




From: " dennisjperkins at comcast.net " < dennisjperkins at comcast.net > 
To: CLUE's mailing list < clue at cluedenver.org > 
Sent: Monday, June 24, 2013 2:56 PM 


Subject: Re: [clue] env variables 







The proper place for these might be in one of the Bash config files. 


From: "Stephen Queen" < svqueen at gmail.com > 
To: "Mark G. Harvey" < markgharvey at yahoo.com >, "CLUE's mailing list" < clue at cluedenver.org > 
Sent: Monday, June 24, 2013 2:37:49 PM 
Subject: Re: [clue] env variables 








When you add 
#!/bin/bash 
to the top of your script, you are starting a new shell. When the script completes, it exits that shell. Instead "source" you environmental variables. Create a file my_env that contains your export commands 
# cat my_env 
export JAVA_HOME=/usr/java/jdk1.7.0_21 
export PATH=$PATH:/usr/java/jdk1.7.0_21/bin 

Then source the file 
. my_env 

(space between . and my_env, does not need to be executable). 
Now when you 
# echo $JAVA_HOME 
usr/java/jdk1.7.0_21 
# 

Steve 











On Mon, Jun 24, 2013 at 1:54 PM, Mark G. Harvey < markgharvey at yahoo.com > wrote: 

<blockquote>



CLUE experts, 

This puzzle is likely simple for you folks, but it has me stumped. I've done considerable digging but have found mixed advice. 

I've created a script to download from a local repo via wget an rpm to install JDK ... no problem there. 

Here's the part I can't get right ... setting the variables so I can run scripts to install Tomcat ... Any attempt will bomb if it can't find /usr/java/jdk1.7.0_21/bin 


# set JAVA_HOME variable ... tried in vain 
echo "setting JAVA_HOME variable variable for the session" 
JAVA_HOME=/usr/java/jdk1.7.0_21 
# export JAVA_HOME variable ... tried in vain 
echo "exporting JAVA_HOME variable variable for the session" 
export JAVA_HOME=/usr/java/jdk1.7.0_21 
echo "JAVA_HOME variable: $JAVA_HOME" 

# set PATH variable for the session ... tried in vain 
echo "setting PATH variable for the session" 
PATH=$PATH:/usr/java/jdk1.7.0_21/bin 
# export PATH variable for the session 
echo "exporting PATH variable for the subsequent sessions & processes" 
export PATH=$PATH:/usr/java/jdk1.7.0_21/bin 
echo "show PATH variable: $PATH" 

sleep 3 # wait 

# create script to set JAVA_HOME & PATH variables in /etc/profile.d/00_jdk.sh script for all accounts 
# use echo command with single quotes to write the literal statement to the script 
touch /etc/profile.d/00_jdk.sh 
echo '#!/bin/bash' >> /etc/profile.d/00_jdk.sh 
echo '# set JAVA_HOME in /etc/profile.d/00_jdk.sh script for all accounts' >> /etc/profile.d/00_jdk.sh 
echo 'JAVA_HOME=/usr/java/jdk1.7.0_21' >> /etc/profile.d/00_jdk.sh 
echo '# set PATH in /etc/profile.d/00_jdk.sh script for all accounts' >> /etc/profile.d/00_jdk.sh 
echo 'PATH=$PATH:/usr/java/jdk1.7.0_21/bin' >> /etc/profile.d/00_jdk.sh 

sleep 3 # wait 

echo "review contents of /etc/profile.d/00_jdk.sh" 
cat /etc/profile.d/00_jdk.sh 


... results of install ... added some blank lines for readability ... 

[root at 87148-mondev01 ~]# ./ DEV_install_jdk1.7-1.0.0.sh 
installation: Oracle/Sun jdk 1.7 64-bit 
remount /tmp with execute privledge 
changed to /tmp 
Pulling package from Artifactory Repo Management Server 
--2013-06-24 13:24:38-- https://<RepoHost>/artifactory/simple/ext-release-local/oracle/jdk/7u21-linux/jdk-7u21-linux-x64.rpm 
Resolving <RepoHost>... 10.33.44.10 
Connecting to <RepoHost>|10.33.44.10|:443... connected. 

HTTP request sent, awaiting response... 200 OK 

Length: 85388149 (81M) [application/x-rpm] 
Saving to: “jdk-7u21-linux-x64.rpm” 

100%[=======================================================================================================================================>] 85,388,149 52.7M/s in 1.5s 

2013-06-24 13:24:40 (52.7 MB/s) - “jdk-7u21-linux-x64.rpm” saved [85388149/85388149] 

jdk downloaded 
check /tmp/ contents for jdk 
-rw-r--r--. 1 root root 85388149 Jun 6 16:46 jdk-7u21-linux-x64.rpm 
install jdk rpm 
Preparing... ########################################### [100%] 
package jdk-2000:1.7.0_21-fcs.x86_64 is already installed ........ due to subsequent running of this script 
install jdk complete 

setting JAVA_HOME variable variable for the session 
exporting JAVA_HOME variable variable for the session 

... when tested in the script, the correct answer shows up ... 

JAVA_HOME variable: /usr/java/jdk1.7.0_21 

setting PATH variable for the session 
exporting PATH variable for the subsequent sessions & processes 

... when tested in the script, the correct answer shows up ... 


show PATH variable: /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.7.0_21/bin:/usr/java/jdk1.7.0_21/bin 

review contents of /etc/profile.d/00_jdk.sh 
#!/bin/bash 
# set JAVA_HOME in /etc/profile.d/00_jdk.sh script for all accounts 
JAVA_HOME=/usr/java/jdk1.7.0_21 
# set PATH in /etc/profile.d/00_jdk.sh script for all accounts 
PATH=$PATH:/usr/java/jdk1.7.0_21/bin 
remount /tmp removing execute privledge 
finished 


... after script runs, when tested from CLI, variables not not correct ... 

[root at 87148-mondev01 ~]# echo $JAVA_HOME 

[root at 87148-mondev01 ~]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 



[root at 87148-mondev01 ~]# exit 
logout 

[vwadmin at 87148-mondev01 ~]$ su - 
Password: 


... now the variable additions show up ... they come from the /etc/profile.d/00_jdk.sh script created as part of the JDK download & install ... 

[root at 87148-mondev01 ~]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_21/bin:/root/bin 

[root at 87148-mondev01 ~]# echo $JAVA_HOME 
/usr/java/jdk1.7.0_21 



... How can I get the variables to be available for the current root session & usable for subsequent installations? Trying to avoid the logout / login ... 



Thanks for your help. 

_______________________________________________ 
clue mailing list: clue at cluedenver.org 
For information, account preferences, or to unsubscribe see: 
http://cluedenver.org/mailman/listinfo/clue 




_______________________________________________ 
clue mailing list: clue at cluedenver.org 
For information, account preferences, or to unsubscribe see: 
http://cluedenver.org/mailman/listinfo/clue 
_______________________________________________ 
clue mailing list: clue at cluedenver.org 
For information, account preferences, or to unsubscribe see: 
http://cluedenver.org/mailman/listinfo/clue 


</blockquote>

_______________________________________________ 
clue mailing list: clue at cluedenver.org 
For information, account preferences, or to unsubscribe see: 
http://cluedenver.org/mailman/listinfo/clue 

</blockquote>


_______________________________________________ 
clue mailing list: clue at cluedenver.org 
For information, account preferences, or to unsubscribe see: 
http://cluedenver.org/mailman/listinfo/clue
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cluedenver.org/pipermail/clue/attachments/20130625/1234318a/attachment.html 


More information about the clue mailing list