su oracle c 返回,su -c命令与环境变量的困惑

http://bbs.chinaunix.net/thread-2003718-1-1.html

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ $ORACLE_HOME/a.sh

this is a.sh

[oracle@localhost ~]$

上面的命令都正常,但是下面的命令则无法运行:

[root@localhost ~]# su - oracle -c "$ORACLE_HOME/a.sh"

-bash: /a.sh: 没有那个文件或目录

[root@localhost ~]#

下面的命令也没问题:

[root@localhost ~]# su - oracle -c "ls $ORACLE_HOME"

admin             Disk3    oraInventory    ra_createdb.log     ra_idx01.dbf     ra.sql

ship_9204_linux_disk1.cpio.gz

createrauser.sql  doc      oui             ra_createtable.log  ra_initData.log  scgs_ca.dmp

ship_9204_linux_disk2.cpio.gz

Disk1             jre      procedurel.log  ra_data01.dbf       ra_rbs01.dbf     scgs_km.dmp

ship_9204_linux_disk3.cpio.gz

Disk2             oradata  product         ra_data02.dbf       ra_scgs.dmp      scgs_ra.dmp  temp01.dbf

[root@localhost ~]#

命令su - oracle -c "$ORACLE_HOME/a.sh"是在当前的Shell下执行的,因为root shell下面没有定义ORACLE_HOME,所以上面命令相当于su - oracle -c "/a.sh" su - oracle -c "ls $ORACLE_HOME"中的命令 ls $ORACLE_HOME是切换到oracle用户环境下执行的,所以没问题。

整条命令su - oracle -c "$ORACLE_HOME/a.sh"是你在root的shell下敲的, 所以命令里面变量$ORACLE_HOME被替换成值,就成了su - oracle -c "/a.sh", 就是-c 后面跟着的字符串在传递给oracle前已经被处理过了,已经变成了"/a.sh"; 你第二条命令里oracle用户执行的也不是 ls $ORACLE_HOME,其实执行的命令是ls,显示的是oracle用户主目录下的东东 不信你可以把oracle profile里的ORACLE_HOME改为/tmp试一下,命令su - oracle -c "ls $ORACLE_HOME"显示的内容和现在 一样,不会是/tmp下的内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值