Linux下Oracle环境变量无效问题解决

今天在Linux下维护Oracle数据库时,查看监听的状态,执行

#lsnrctl status

报错: -bash:lsnrctl:command not found。以前并不会这样,仔细想了一下,问题找到了,我是以root远程登录到服务器上,维护oracle时,直接 su oracle,这样操作虽然用户切换为oracle,但是环境变量仍然是root的环境变量,所以会报环境变量错误,正确的命令是su - oracle,这样环境变量也会切换为oracle的环境变量。
看一下 su 命令的 man page

NAME
 su - run a shell with substitute user and group IDs

SYNOPSIS
 su [OPTION]... [-] [USER [ARG]...]

DESCRIPTION
 Change the effective user id and group id to that of
 USER.

-, -l, --login
 make the shell a login shell, clears all envvars
 except for TERM, initializes HOME, SHELL, USER,
 LOGNAME and PATH

...

A mere - implies -l. If USER not given, assume root.

可以看到,加了 - 选项后,会清空除term外的环境变量,重新初始化HOME、SHELL、USER、LOGNAME和PATH。

所以要多注意细节,尤其Linux下面,一点点的不一样,都有可能引起完全不同的结果。

相关推荐