免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3253 | 回复: 5
打印 上一主题 下一主题

一个su和read多重嵌套的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-10 12:23 |只看该作者 |倒序浏览
  1. #!/bin/ksh
  2. load()
  3. {
  4.    su - sun -c "echo $1"
  5. }

  6. while read input
  7. do
  8.   case $input in
  9.    "a")
  10.        load $input;;
  11.    "b")
  12.        echo "b1" >tmpfile
  13.        echo "b2" >>tmpfile
  14.        while read num
  15.          do
  16.             load $num
  17.          done<tmpfile;;
  18.      *)
  19.        exit 1;;
  20.    esac
  21. done
复制代码


sun为本机用户,输入b的时候就报错了,但load函数还是正确运行了
  1. #./aa   
  2. a
  3. a
  4. b
  5. stty: 标准输入: 对设备不适当的 ioctl 操作
  6. logname: no login name
  7. b1
  8. stty: 标准输入: 对设备不适当的 ioctl 操作
  9. logname: no login name
  10. b2
复制代码


把这段
while read num
    do
       load $num
    done<tmpfile;;
语句改成
for num in `cat tmpfile`
   do
     load $num
   done;;
一切正常

期待高手解惑

[ 本帖最后由 ywlscpl 于 2009-2-10 12:27 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-10 12:36 |只看该作者
这样就更明了了,跟函数也是无关的,确定是read多重嵌套问题
  1. #!/bin/ksh
  2. while read input
  3. do
  4.   case $input in
  5.    "a")
  6.        su - sun -c "echo $input"  ;;     
  7.    "b")
  8.        echo "b1" >tmpfile
  9.        echo "b2" >>tmpfile
  10.        while read num
  11.          do
  12.             su - sun -c "echo $num"
  13.          done<tmpfile;;
  14.      *)
  15.        exit 1;;
  16.    esac
  17. done
复制代码

  1. #./aa   
  2. a
  3. a
  4. b
  5. stty: 标准输入: 对设备不适当的 ioctl 操作
  6. logname: no login name
  7. b1
  8. stty: 标准输入: 对设备不适当的 ioctl 操作
  9. logname: no login name
  10. b2
复制代码

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
3 [报告]
发表于 2009-02-10 12:51 |只看该作者

回复 #2 ywlscpl 的帖子

你用的是什么系统,ksh是什么版本

论坛徽章:
0
4 [报告]
发表于 2009-02-10 13:07 |只看该作者

回复 #3 ynchnluiti 的帖子

shell版本不知道怎么看

  1. [root@host ~]# lsb_release -a
  2. LSB Version:    3.0
  3. Distributor ID: Asianux
  4. Description:    Asianux release 2.0 (Trinity)
  5. Release:        2.0
  6. Codename:       Trinity
  7. [root@host ~]# uname -a
  8. Linux host.localdomain 2.6.9-11.19AXsmp #1 SMP Fri Aug 5 05:28:32 EDT 2005 i686 i686 i386 GNU/Linux
  9. [root@host ~]#
复制代码

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2009-02-10 13:19 |只看该作者
原帖由 ywlscpl 于 2009-2-10 13:07 发表
shell版本不知道怎么看

[root@host ~]# lsb_release -a
LSB Version:    3.0
Distributor ID: Asianux
Description:    Asianux release 2.0 (Trinity)
Release:        2.0
Codename:       Trinity
...

我这里运行那两个脚本都行.

不是特别清楚,可能是输入重定向问题。

论坛徽章:
0
6 [报告]
发表于 2009-02-10 13:25 |只看该作者

回复 #5 ynchnluiti 的帖子

换别的命令应该没问题,应该是su命令问题吧

红旗桌面版6.0 sp1又是没问题的,1楼会出错那个是红旗linux server版
  1. [root@Mylinux tmp]# lsb_release -a
  2. LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
  3. Distributor ID: n/a
  4. Description:    Red Flag Desktop 6.0 SP1
  5. Release:        n/a
  6. Codename:       n/a
复制代码

[ 本帖最后由 ywlscpl 于 2009-2-10 13:31 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP