在sudo内部,当命令内联与调用第二个脚本时,环境变量不会被设置。

问题描述 投票:0回答:1

我正以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中设置的。

environment-variables ksh sudo su
1个回答
0
投票

'转义符在这种情况下不起作用。下面的工作是转义$字符。

sudo su - oracle -s /bin/ksh -c "echo Called from sudo - Oracle home is \${ORACLE_HOME}"

把""去掉,然后在$前面加上""。

© www.soinside.com 2019 - 2024. All rights reserved.