LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1191|回复: 7

bash, sh的问题

[复制链接]
发表于 2004-6-22 11:51:34 | 显示全部楼层 |阅读模式

  1. #!/bin/bash
  2.                                                                                                                                                                            
  3. IF="9.17.32.162 knoppix.boulder.ibm.com 9.17.203.191 bldibmxgawb01.boulder.ibm.com"                                                                                                                                                                           
  4. while read ip host; do echo $ip $host;done < <(echo $IF)
复制代码


稍微修改一下:

  1. #!/bin/sh
  2.                                                                                                                                                                            
  3. IF="9.17.32.162 knoppix.boulder.ibm.com 9.17.203.191 bldibmxgawb01.boulder.ibm.com"                                                                                                                                                                           
  4. while read ip host; do echo $ip $host;done < <(echo $IF)
复制代码


下面的报错, 而上面的运行. 什么必须指定bash呢. 如果用sh, 而系统default的是bash的话, sh不是执行bash吗? 到底哪里不同?
发表于 2004-6-22 12:09:22 | 显示全部楼层
出于兼容性考虑,bash 以 sh 启动时,会禁止掉一些 features,这是很多 command 采用的处理方式,比如:当用 vi 来启动 vim 时,你喜欢的一些 vim 的特性就没有了
发表于 2004-6-22 12:12:17 | 显示全部楼层
just look at this:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-6-22 12:13:51 | 显示全部楼层
理解一下各种shell间的关系:
  1. /home/lee#ls -l $(</etc/shells)
  2. -rwxr-xr-x    1 root     root        92444 2003-02-06  /bin/ash
  3. -rwxr-xr-x    1 root     root       626028 2003-02-11  /bin/bash[color=green]
  4. lrwxrwxrwx    1 root     root            4  5月  8 09:23 /bin/bash2 -> bash
  5. lrwxrwxrwx    1 root     root            3  5月  8 09:24 /bin/bsh -> ash[/color]
  6. lrwxrwxrwx    1 root     root            4  5月  8 09:29 /bin/csh -> tcsh
  7. -rwxr-xr-x    1 root     root       180820 2003-01-25  /bin/ksh[color=green]
  8. lrwxrwxrwx    1 root     root            4  5月  8 09:23 /bin/sh -> bash[/color]
  9. -rwxr-xr-x    1 root     root       316276 2003-01-25  /bin/tcsh
  10. -rwxr-xr-x    1 root     root         2912 2003-02-25  /sbin/nologin
复制代码

事实上,/bin/sh是不存在的,它实际上指向的是/bin/bash,有这个连接,不过是为了人们的习惯而已!
sh的扩展能力和重定向的能力,交互性远远不能和bash相比,出现的错误提示也说明了这点!
line 4: syntax error near unexpected token `<'
 楼主| 发表于 2004-6-22 22:14:24 | 显示全部楼层
确实挺有意思。虽然sh只是个联接,但bash对它还是做了一些限制。我原以为如果只是单纯的link的话,sh应该和bash一样呢。谢谢!受教了。
发表于 2004-6-23 09:01:08 | 显示全部楼层
一个命令很容易判断自己是以什么名字启动的,请看:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2004-6-23 10:36:07 | 显示全部楼层
嗯, 识别$0没有什么问题.我想关键在于启动shell的时候, default shell会去找#!后的shell标识. 比如./foo命令. foo的第一行是#!/bin/sh.虽然sh是bash的链接, 但当bash执行这一句的时候就会尽可能地用sh的功能而不是bash本身的诸多功能.如果第一行是#!/bin/bash则bash将运行其所有的功能. 这是我的理解. 对dearvoid兄的上上楼帖,这样解释是通的. 是否确实是这样的情形呢?
发表于 2004-6-23 11:58:06 | 显示全部楼层
差不多就是这个意思,虽然不很严格
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表