现在在编写一个脚本,希望在root用户下收集oracle用户下的一些信息,但是发现在脚本中切换用户执行命令会出现环境变量问题。
[root@oracle01 ~]# su - oracle -c "$ORACLE_HOME/OPatch/opatch lsinventory"
-bash: /OPatch/opatch: No such file or directory
[root@oracle01 ~]# su - oracle -c "echo $ORACLE_HOME"
[root@oracle01 ~]#
如上面的命令所示,ORACLE_HOME是个空。
oracle用户下确实设置了环境变量,但是使用su - oracle -c "echo $ORACLE_HOME"这种样子查看时却显示该变量为空。
要如何才能在切换oracle用户后正确使用$ORACLE_HOME变量呢?
[root@oracle01 ~]# su - oracle
Last login: Wed Mar 13 16:20:05 CST 2024 on pts/0
[oracle@oracle01 ~]$ cat ~/.bash_profile
...省略一些输出
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
...省略一些输出
[oracle@oracle01 ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1
[oracle@oracle01 ~]$ exit
logout
[root@oracle01 ~]#
[root@oracle01 ~]# su - oracle -c "env|grep ORACLE_HOME"
ORACLE_HOME=/01/app/oracle/product/11.2.0/db_1
[root@oracle01 ~]# su - oracle -c "echo $ORACLE_HOME"
[root@oracle01 ~]#
su - oracle -c "echo $ORACLE_HOME"
用双引号(
"echo $ORACLE_HOME"
)的话,环境变量会在 su 执行之前被替换,所以它被替换成了当前用户的 ORACLE_HOME 。换成单引号
'echo $ORACLE_HOME'
试一下。