我正以root身份运行korn shell脚本,并需要以不同的用户(oracle)的sudo来执行一些命令,我需要访问在.profile中设置的环境变量。
如果我调用第2个脚本来执行这些命令,我看到的行为与在线执行命令不同。
下面是一个简单的测试来演示。这可以工作并显示$ORACLE_HOME环境变量。
sudo su - oracle -s /bin/ksh -c "/home/u6vzbes/upgrade/get_oracle_home_test.ksh"
被调用的脚本就是这个
#!/bin/ksh
echo 'Called from script - ORACLE_HOME is ' ${ORACLE_HOME}
但是这个不工作,$ORACLE_HOME环境变量是空白的。
sudo su - oracle -s /bin/ksh -c "
echo 'Called from sudo - Oracle home is ${ORACLE_HOME}'
"
为什么这两种工作方式不一样?我更喜欢内联执行命令,而不是有第二个脚本,因为我需要在整个根脚本中多次sudo到oracle。顺便说一下,环境变量是在oracle用户的.profile中设置的。
'转义符在这种情况下不起作用。下面的工作是转义$字符。
sudo su - oracle -s /bin/ksh -c "echo Called from sudo - Oracle home is \${ORACLE_HOME}"
把""去掉,然后在$前面加上""。