shell不能执行su 后的脚本

转载 2015年11月20日 15:29:14
问题:在shell脚本中执行“su – 用户名”后,脚本终止执行,并且切换到su 中指定用户名的交互式界面 
现象:我在root中执行一个脚本,但是其中的一些命令或脚本必须用oracle用户来执行。,
  1. [root@HZ-ITF-01 cron.d]# vi /data/itf/app/oracle/sync/test.sh  
  2.  #!/bin/bash  
  3. set -x  
  4. su - oracle  
  5. sqlplus /nolog <<EOF  
  6. conn hxy/hxy  
  7. create table test1 as select * from dba_tables;  
  8. exit  
  9. EOF  

在root用户下执行sh /data/itf/app/oracle/sync/test.sh后,停止在oracle用户的交互界面不在往下执行 ,需要手动输入exit才能继续,但是在脚本中加入exit也不好使 

分析: 
a、su – 之后就直接切换环境并且等待用户的交互式访问了,不在继续执行脚本中的命令 
b、su后的bash是一个子shell,脚本里写exit没有用,这些都要等su这个进程结束后才会执行。 
解决方案: su – 用户 -c 命令 
     或者 
     sudo -u 用户 命令 参考示例: 参考资料: Shell 中切换用户
 
然后脚本修改成下面的方式
  1. #!/bin/bash  
  2. #set -x   
  3. su - oracle -c sqlplus /nolog <<EOF  
  4. conn hxy/hxy  
  5. create table test1 as select * from dba_tables;  
  6. exit  
  7. EOF   

 脚本顺利执行
或者改成:
  1. #!/bin/bash  
  2. set -x   
  3. su - oracle <<!  
  4. sqlplus /nolog <<EOF  
  5. conn hxy/hxy  
  6. create table test1 as select * from dba_tables;  
  7. exit  
  8. EOF   
  9. !  

也可以顺利执行

shell中用指定用户运行命令 su

==更新 =su命令 -.-l或--login  改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。 - -l 或 --login ...
  • zq530885040
  • zq530885040
  • 2013年09月07日 20:51
  • 3950

adb shell后执行su文件,无反应。。。不能获取权限 的 解决办法

问题:控制台(终端)执行adb shell 进入shell后,输入 su(前提是手机/system/bin路径下有这个提权文件),然后控制台一直处于等待状态。 Android开发人员会只用该...
  • baisedeqingting
  • baisedeqingting
  • 2017年11月14日 21:07
  • 290

su后继续执行脚本

android开发中,有时会需要写脚本来处理一些问题,
  • echojiangyq
  • echojiangyq
  • 2014年05月16日 14:06
  • 2858

Shell脚本——su、sudo

· su su命令临时切换到root用户; su [option] [用户] 其中, -后接用户名,表示登录并切换到用户环境; -c后接命令,表示执行该命令再退出所切换的用户环境; ...
  • twc829
  • twc829
  • 2017年06月12日 17:59
  • 411

【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中

有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切换到root,这样在执行批处理或想将文件放到手机系统中会有问题: 方法一:命令行 1 a...
  • wirelessqa
  • wirelessqa
  • 2013年02月28日 22:58
  • 42386

shell中sudo和su命令

原文地址::http://blog.csdn.net/liuxigiant/article/details/9090993 sudo command    sudo命令是以root的身份执...
  • xqhrs232
  • xqhrs232
  • 2017年03月08日 11:00
  • 311

shell 脚本之切换用户

用su - 用户 -c 命令格式来执行. 有时候需要切换到root用户做一些操作,如果你的用户没有添加sudo权限,那么在脚本中实现就需要使用expect命令了,具体实现如下:#!/usr/bin...
  • Augusdi
  • Augusdi
  • 2015年05月13日 14:47
  • 16271

Android系统默认的su程序只能root和shell可以用运行su

原文:Android系统默认的su程序只能root和shell可以用运行su S3K3论坛从上面代码我们可以看到首先要运行su程序,其实root的秘密都在su程序中,Android系统默认的su程序...
  • mynote
  • mynote
  • 2014年07月16日 14:43
  • 6962

Android bat批处理自动执行adb shell命令

1 问题最近在做app的时候,要将Android手机中的Sqlite数据库导入到pc上,查看里面的数据,然后每次去app的目录下面去找出数据库,然后在adb shell中复制到sdCard,然后退出s...
  • fuchaosz
  • fuchaosz
  • 2016年04月06日 17:22
  • 10652

su 和 su- 会影响环境变量

大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和...
  • baoendemao
  • baoendemao
  • 2014年04月15日 19:26
  • 442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell不能执行su 后的脚本
举报原因:
原因补充:

(最多只允许输入30个字)