LinuxSir.cn,穿越时空的Linuxsir!

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

弱问题 : **** &>/dev/null???

[复制链接]
发表于 2003-6-28 13:03:46 | 显示全部楼层 |阅读模式
/home/bbs/bin/auto_rm_junk &>/dev/null
                           ~~~~~~~~~~~这个是什么意思?
为什么要这样做?
发表于 2003-6-28 13:31:02 | 显示全部楼层
运行auto_rm_junk到后台(&),将所有输出都不显示(>/dev/null)
发表于 2003-6-28 14:22:35 | 显示全部楼层
应该是把输出重定向到NULL吧

另外这个能运行成功码
怀疑

普通的方法是  >/dev/null 2&>1
发表于 2003-6-28 15:05:22 | 显示全部楼层
http://www.linuxsir.cn/bbs/showthread.php?threadid=38203
http://www.linuxsir.cn/bbs/showthread.php?threadid=40501

1.&>file或n>&m均是一个独立的重定向符号,不要分开来理解。

2.明确文件和文件描述符的区别。

3.&>file表示重定向标准输出和错误到文件
例如:
rm -f $(find / -name core) &> /dev/null,/dev/null是一个文件,这个文件比较特殊,所以传给它的东西它都丢弃掉。

4.n>&m表示使文件描述符n成为输出文件描述符m的副本
例如:
注意,为了方便理解,必须设置一个环境使得执行grep da *命令会有正常输出和错误输出,然后分别使用下面的命令生成三个文件:
grep da * > greplog1
grep da * > greplog2 1>&2
grep da * > greplog3 2>&1
#查看greplog1会发现里面只有正常输出内容
#查看greplog2会发现里面什么都没有
#查看greplog3会发现里面既有正常输出内容又有错误输出内容
 楼主| 发表于 2003-6-28 18:28:51 | 显示全部楼层
非常感谢各位的回复.
在下还有一个小问题不清楚:
$是什么意思?
最初由 LYOO 发表
例如:
rm -f $ (find / -name core) &> /dev/null,/dev/null是一个文件,这个文件
发表于 2003-6-28 19:22:53 | 显示全部楼层
看来楼上的对于shell还不熟悉。
在shell中执行命令可以用两种方式。一种是用反引号,如grep *.cpp `ls -l`。另一种是用$(command)的形式,把要执行的命令写在括号中。如:rm -f $(find / -name core)。它的意思是删除find / -name core找到的core文件。
发表于 2003-6-28 21:43:52 | 显示全部楼层
明白
又多学一招
发表于 2004-4-25 01:12:47 | 显示全部楼层
文件描述符对应了/dev/fd/N(N从0开始)文件,它们是由内核调用动态生成的。
每个shell进程都有自己的文件描述符资源,且可继承。
n>&m就是把指向文件描述符n的指针赋值为指向文件描述符m的指针。
不知道说得对不对。

kj501兄可以就你的编程经验把这个问题再深入讲解一下吗?
发表于 2004-4-25 09:09:09 | 显示全部楼层
准确地说,文件描述符是进程资源中一个重要的组成部分,它用整数来表示(不是指针)。linux的进程在创建时,默认会打开3个文件描述符0,1和2,分别对应标准输入stdin,标准输出stdout和标准错误输出stderr。标准输入一般都是键盘,标准输出和标准错误输出一般指的是屏幕。要注意的是,文件描述符对应的是打开的文件,而不是/dev目录下的设备文件。如果用open("kk",O_RDONLY)打开一个磁盘上名为“kk"的文件,如果进程创建后没有打开其它文件,则这个打开的文件所对应的文件描述符应该按顺序是3。以后每次打开一个新的文件,文件描述符依次就是4,5,6,7.。。。这样按顺序递增。现在的linux内核能够支持一个linux的进程打开最多1024个文件(以前是256个)。应该说是很强了。
由于文件描述符只是代表一个打开的文件,具体打开的是什么文件与文件描述符是没有关系的,并且文件描述符所代表的文件是可以动态变更的,就象教室里面的座位一样,有人座在那儿,表示这个位置已经有人了,如果以前座在那儿的人走了,换了一个人座在那儿,这个位置还是被占用了,但座在位置上的人变了。文件描述符就好象这个座位的座位号,而文件描述符所代表的文件就相当于座在座位上的人。座位号不变,但人是可以变的,这一点可以用来进行重定向。比如说在shell下执行ls * > tt。ls作为一个进程,它的标准输出文件描述符1缺省应该是代表屏幕。但是在重定向后,它的标准输出,也就是文件描述符1所代表的文件就不是屏幕了,而是变成了打开的文件tt。这样,ls命令的输出结果就不会显示在屏幕上,而是写入到文件tt中。
在创建子进程时,父进程打开的文件描述符可以被子进程继承。
发表于 2004-4-25 12:01:08 | 显示全部楼层
学到了,谢谢kj501兄。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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