Quantcast
Channel: Java mon amour
Viewing all articles
Browse latest Browse all 1121

bash: run su passing parameters

$
0
0
if you decide to switch to another user to run some commands, remember that whatever variable you have defined so far will NOT be passed to the other user.


message="fanculo"
echo $message
fanculo
su - wls
echo $message
(nothing will be displayed, as "message" is not defined for wls)



This of course is a HPITA (aka RPITA) for someone who writes shell scripts.

You can use the "su -p" to pass the whole environment, but then there are some side effects:

su -p - wls
su: ignore --preserve-environment, it's mutually exclusive to --login.


(the "-" options is same as "--login")


su -p wls
bash: /root/.bashrc: Permission denied




I found it cleaner and easier to simply run the command I have to run with the "-c" option, so that variable substitution takes place in the "right" (root) context:

softwareFolder=/software
scriptFolder=/wlinstall

....

su - wls -c "export JAVA_VENDOR=Sun;export JAVA_HOME=/usr/java/jdk1.7.0_55/;java -d64 -Xmx1024m -Djava.io.tmpdir=/opt/oracle/temp -jar ${softwareFolder}/wls1036_generic.jar -mode=silent -silent_xml=${scriptFolder}/weblogic_silent_install.xml"




this way softwareFolder and scriptFolder are both defined and I don't have to reinitialize them for the wls user...


Viewing all articles
Browse latest Browse all 1121

Trending Articles