问题:在shell脚本中执行“su – 用户名”后,脚本终止执行,并且切换到su 中指定用户名的交互式界面 
现象:我在root中执行一个脚本,但是其中的一些命令或脚本必须用oracle用户来执行。,
[root@HZ-ITF- cron.d]# vi /data/itf/app/oracle/sync/test.sh
#!/bin/bash
set -x
su - oracle
sqlplus /nolog <<EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
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 中切换用户
 
然后脚本修改成下面的方式
#!/bin/bash
#set -x
su - oracle -c sqlplus /nolog <<EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
EOF

脚本顺利执行

或者改成:
#!/bin/bash
set -x
su - oracle <<!
sqlplus /nolog <<EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
EOF
!

也可以顺利执行

 

shell不能执行su 后的脚本的更多相关文章

  1. Ubuntu执行su后输入密码结果认证失败--解决办法:sudo passwd修改命令

  2. 在shell下执行命令的方法

    在shell下执行命令的方法 1. #!/bin/sh 语法:在shell.sh的开头写入 #!/bin/sh 一般的shell脚本就是这种用法.这种方法调用脚本开头的shell执行命令,子shell ...

  3. eas之dep的前置脚本和后置脚本

    dep的前置脚本和后置脚本,什么时候写,是这样解释的:    前置脚本是在方法前执行,后置脚本是在方法后执行    1.比如保存扩展,如果你要在保存前校验某个字段的值,你要在前置脚本中写,如果要保存后 ...

  4. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

  5. Linux shell批量执行scp脚本工具

    转载: linux shell + expect:批量scp脚本工具             2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...

  6. shell命令执行hive脚本(hive交互,hive的shell编程)

    Hive执行方式 Hive的hql命令执行方式有三种: 1.CLI 方式直接执行 2.作为字符串通过shell调用hive –e执行(-S开启静默,去掉"OK","Tim ...

  7. shell编程===执行shell脚本的四种方法

    使用vim创建一个shell文件,命名 hello.sh #!/bin/bash echo "hello shell !" 在linux中进行加载 chmod +x ./hello ...

  8. jenkin构建项目执行脚本后,脚本中启动的进程也随之关闭的解决办法

    问题描述: 之前用jenkins构建项目(maven项目)后都是通过ssh先将war文件推送到远程服务器,然后执行远程的脚本(更新项目,重启tomcat),一直没有出现问题,今天使用jenkins构建 ...

  9. Linux下通过shell进MySQL执行SQL或导入脚本

    这条命令表示通过用户名和密码执行shell然后在shell里面执行一个建表语句: USER="root" PASS="root" mysql -u $USER ...

随机推荐

  1. iOS 分析一个支持GIF的UIImage扩展:SwiftGIF

    Github:https://github.com/bahlo/SwiftGif 这个extension代码不多,主要通过Apple的ImageIO框架进行解析GIF. 整个扩展最核心还是下面的函数, ...

  2. Unity 小问题

    Cannot cast from source type to destination 我用Object 转 int 会出现这个错误提示 例如 : object p; int pp = (int)p; ...

  3. Publishing failed with multiple errors 异常

    Publishing failed with multiple errors 在使用eclipse发布项目时不能自动生成class文件,且无法启动调试的Tomcat服务.启动过程提示 以上 异常 解决 ...

  4. ARCGIS9.3安装说明

    1) 安装LMSetup.exe"    其中第一步选择第一项,并使用"37102011.efl9"文件做为lic文件,在使用之前需要将该文件中的主机名改为本机的机器名, ...

  5. Node.js入门笔记(3):全局对象(2)

    buffer 用于更好操作二进制数据,他是一个全局变量.类似数组. var a=new Buffer(); buffer类的三种实现 第一种创建方式 new Buffer(size);size[Num ...

  6. 快排 快速排序 qsort quicksort C语言

    现在网上搜到的快排和我以前打的不太一样,感觉有点复杂,我用的快排是FreePascal里/demo/text/qsort.pp的风格,感觉特别简洁. #include<stdio.h> # ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Windows下,MySQL root用户忘记密码解决方案

    同时打开2个命令行窗口,并按如下操作: <1>.在第一个“命令行窗口”输入: cd  D:\Program Files\MySQL\MySQL Server 5.5\bin net sto ...

  9. C和指针 第十二章 使用结构和指针

    链表是一种常用的数据结构,每个节点通过链或者指针链接在一起,程序通过间接指针访问链表中的节点. typedef struct Node { //指向下一个节点的指针 struct Node *next ...

  10. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...