LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: home_king

【Bash命令行处理】[详解]

[复制链接]
发表于 2004-4-8 02:53:10 | 显示全部楼层
pwd在超过三个///时,就显示正确了。两个时就显示两个。而ls .//////////*这样的,无论加多少都显示出来, 是挺有意思...
试验:
shell>pwd
shell>/root
shell>ls -d /$(pwd)////*
shell>/root////install.log /root/mime.result /root////shell_scripts
shell>ls -d ///$(pwd)////*
shell>////root////install.log ////root/mime.result ////root////shell_scripts
看样子,ls将多于的/直接stdout了,没有做任何解释。
发表于 2004-4-8 04:07:13 | 显示全部楼层
Unix, Sun Solaris 上试了, ls的结果一样, 但是pwd不同,unix上 pwd返回的总是正确的值. 如 cd //, pwd 还是返回/.Linux可能是有小bug.
 楼主| 发表于 2004-4-8 13:14:21 | 显示全部楼层
最初由 yongjian 发表
Unix, Sun Solaris 上试了, ls的结果一样, 但是pwd不同,unix上 pwd返回的总是正确的值. 如 cd //, pwd 还是返回/.Linux可能是有小bug.

呵呵,在下把其中的奥妙告诉你们。

  1. [root@home root]# cd //
  2. [root@home //]# pwd
  3. //
  4. [root@home //]# type -all pwd
  5. pwd is a shell builtin
  6. pwd is /bin/pwd
  7. [root@home //]# /bin/pwd
  8. /
  9. [root@home //]# enable -n pwd
  10. [root@home //]# pwd
  11. /
  12. [root@home //]# alias pwd='enable -n pwd;pwd'
  13. [root@home //]# pwd
  14. /
复制代码

pwd命令有两个,一个是shell内置的,一个是可执行程序。
shell内置的pwd会打印出"错误信息",但外部的pwd会打印出当前目录的"原来面目"。
UNIX变种如Solaris等应该做了pwd的假名,如上面我用enable(屏蔽内置命令)做的假名一样。
不要被表面现象蒙蔽了双眼,呵呵
:p
发表于 2004-4-8 13:30:54 | 显示全部楼层
谢谢教主兄的答复。
这个我知道,shell有很多内建命令。可以参考一下关于系统安全方面的资料,经常提到,root用户的shell不建议使用bash等新一代shell,而要用久经考验的sh,和久经考验的外部命令,如/bin/kill等。
问题是为什么内建命令会显示//呢?
还有.////////////////的现象如何解释?是和系统有关还是和shell有关?
 楼主| 发表于 2004-4-8 13:44:47 | 显示全部楼层
最初由 r2007 发表
谢谢教主兄的答复。
这个我知道,shell有很多内建命令。可以参考一下关于系统安全方面的资料,经常提到,root用户的shell不建议使用bash等新一代shell,而要用久经考验的sh,和久经考验的外部命令,如/bin/kill等。
问题是为什么内建命令会显示//呢?
还有.////////////////的现象如何解释?是和系统有关还是和shell有关?

原来r2007兄想探究的是安全问题是吧,呵呵~~
这个可能要研读bash的相关源码才能解释了。
 楼主| 发表于 2004-4-8 13:45:50 | 显示全部楼层
已添加三个改变命令行处理的命令:
command, built, enable

请重温顶帖,谢谢。:cool:
发表于 2004-4-8 14:01:27 | 显示全部楼层
确实是在学习linux安全指南时,漫无目的的乱试中无意发现的问题。觉得有趣,就丢上来探讨一下。由于没有其它shell和其它系统,还请大家试一下./////到底是shell还是系统惹的祸?
PS: 关于//的问题在资料里已经找到了这方面的介绍,说是bash的一个bug
发表于 2004-4-8 14:05:03 | 显示全部楼层
bash,csh,ksh,均有此现象~
 楼主| 发表于 2004-4-8 14:09:52 | 显示全部楼层
难道所有的shell都有这个bug,在下只懂bash,呵呵。
r2007兄,你看过bash的相关源码嘛?有研究的话贴出来分析一下。
发表于 2004-4-8 14:12:47 | 显示全部楼层
最初由 home_king 发表
难道所有的shell都有这个bug,在下只懂bash,呵呵。
r2007兄,你看过bash的相关源码嘛?有研究的话贴出来分析一下。

惭愧,对源代码的研究,我还未涉及。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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