博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell切换用户
阅读量:2440 次
发布时间:2019-05-10

本文共 691 字,大约阅读时间需要 2 分钟。

背景:升级现网,开发提供的升级指导书命令过多,考虑放到一个脚本中一次执行;需要在/opt或/usr下新建备份目录,业务用户没有权限,考虑用root用户一次执行脚本

问题:root用户执行脚本时有su - xx后退出业务用户,此时exit不起作用

问题原因:su后会打开业务用户子shell,命令都是在子shell中执行了,所以脚本中的exit没有用,参见如下,后面跑的shellx是su后启动的-csh的子进程

root     14194 28625  0 Apr26 pts/1    00:00:00 su - monemone     14195 14194  0 Apr26 pts/1    00:00:00 -cshmone      3797 14195  1 15:19 pts/1    00:00:00 /bin/ksh /home/mone/cluster/shellx
问题解决:

1.使用su - xx -c xxx完成

2.使用EOF并输入交互式内容

方法1在命令较少情况下比较适用 ,如su - mone -c p

方法2解决示例如下:

su - mone << EOFplsdf -mEOF

“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,实际上在产品的数据库升级脚本执行中也采用了类似方法。

以上代码也可以将EOF换为!!,即

su - mone << !!plsdf -m!!
如果有多次跳转,比入要切换到oracle然后执行sql呢?也可以,以不同的分隔符表示即可,如EOF1,EOF

转载地址:http://dacqb.baihongyu.com/

你可能感兴趣的文章
Unix类操作系统入门(转)
查看>>
让FreeBSD使用ntpd同步时间(转)
查看>>
用cat命令查看文件内的特殊字符(转)
查看>>
debian sid下vmware不能运行一则(转)
查看>>
Linux操作系统套接字编程的5个隐患(转)
查看>>
Ubuntu Linux:定制Ubuntu安装CD(转)
查看>>
调查显示:企业级Linux用户不断攀升(转)
查看>>
Ubuntu/Linux入门介绍-dpkg(转)
查看>>
SCO UNIX学习宝典 高级进阶(转)
查看>>
Oracle9i RAC for RedFlag Linux DC4.1 32bit 安装流程(转)
查看>>
Sybase和Oracle安装过程中常遇到的问题(转)
查看>>
红帽Linux新系统整合虚拟技术 实现简易操作(转)
查看>>
Linux下/etc/default/boot文件字段说明(转)
查看>>
Linux壁纸系列三十四(转)
查看>>
使用带有Dtrace的FreeBSD(转)
查看>>
Fedora Core 4硬盘安装方法(转)
查看>>
常用的系统状态查询命令(转)
查看>>
『推荐』上G的linux视频教程和电子书FTP下载,速度快内容实用!(转)
查看>>
AIX系统日常管理(转)
查看>>
Fedora Core 6的新特性(转)
查看>>