当前位置: 技术问答>linux和unix
请教:> /dev/null 2>1& 这个命令是什么意思?
来源: 互联网 发布时间:2017-01-21
本文导语: 如题。 > /dev/null 2>1& 这个命令是什么意思? 看了一些帖子,大概知道 > /dev/null是屏蔽输出的意思。 后面的2>1&是什么意思呢?有什么作用? 谢谢! | http://bbs.chinaunix.net/viewthread.php?tid=218853&page=7#pid...
如题。 > /dev/null 2>1& 这个命令是什么意思?
看了一些帖子,大概知道 > /dev/null是屏蔽输出的意思。
后面的2>1&是什么意思呢?有什么作用?
谢谢!
看了一些帖子,大概知道 > /dev/null是屏蔽输出的意思。
后面的2>1&是什么意思呢?有什么作用?
谢谢!
|
|
> 是重定向,意思是把输出信息重新定向到后面的设备
/dev/null 像楼上说的,是一个黑洞,任何输出到它的信息都被丢弃
这儿的2和1都是文件描述符,1表示标准输出,2表示错误输出
2>&1 表示把错误输出定向到标准输出
如果>前面没用数字,缺省就是标准输出
>/dev/null 2>&1
整体就表示把某个命令的标准输出定向到空设备,错误输出定向到标准输出,其实也定向到了空设备
/dev/null 像楼上说的,是一个黑洞,任何输出到它的信息都被丢弃
这儿的2和1都是文件描述符,1表示标准输出,2表示错误输出
2>&1 表示把错误输出定向到标准输出
如果>前面没用数字,缺省就是标准输出
>/dev/null 2>&1
整体就表示把某个命令的标准输出定向到空设备,错误输出定向到标准输出,其实也定向到了空设备
|
标准输出到/dev/null了,错误也到标准输出,那应该没信息显示了
|
有啊,/dev/null是黑洞,啥东西进去都没了。不过楼主写错了,是2>&1。
|
2>1& 是把 标准错误 重定向到 标准输出。
|
错误信息也追加到输出
|
[mike@RHEL6A scripts]$ more sh1.sh
echo 'hello'
abc
[mike@RHEL6A scripts]$ ./sh1.sh
hello
./sh1.sh: line 2: abc: command not found
[mike@RHEL6A scripts]$ more ./sh2.sh
sh1.sh > /dev/null 2>1&
[mike@RHEL6A scripts]$ ./sh2.sh
[mike@RHEL6A scripts]$
自己写两个最简单的例子运行一下就知道了
echo 'hello'
abc
[mike@RHEL6A scripts]$ ./sh1.sh
hello
./sh1.sh: line 2: abc: command not found
[mike@RHEL6A scripts]$ more ./sh2.sh
sh1.sh > /dev/null 2>1&
[mike@RHEL6A scripts]$ ./sh2.sh
[mike@RHEL6A scripts]$
自己写两个最简单的例子运行一下就知道了
|
我还是比较菜这也没发现,照着楼主写的成了后台运行了
[mike@RHEL6A scripts]$ more sh2.sh
sh1.sh > /dev/null 2>&1
[mike@RHEL6A scripts]$ ./sh2.sh
[mike@RHEL6A scripts]$
|
哈哈,也可以看看传说中的“康神”是怎么写的:
http://hi.baidu.com/monyer/blog/item/004279893bcd6db50e244456.html
http://hi.baidu.com/monyer/blog/item/004279893bcd6db50e244456.html
#!/bin/bash
OLDCONTENT=`find -type f -exec md5sum {} ; | md5sum`
svn up &> /dev/null
NEWCONTENT=`find -type f -exec md5sum {} ; | md5sum`
if [ "$NEWCONTENT" != "$OLDCONTENT" ]; then
# reload updated configuration
fi
|
所有shell重定向我无所不通。。。其实这些玩意还是从编程角度记忆理解的才深刻。
重定向从微观角度来讲,只有2种:
1,描述符定向到文件
2,描述符定向到描述符
对于情况1: > /dev/null
这里隐藏了一个默认参数,完整命令为: 1 > /dev/null
其C实现为:fd=open("/dev/null",O_TRUNC|O_WRONLY|O_CREAT,mode); dup2(fd,1); close(fd);
之后写往1的数据就写入了/dev/null这个文件。
对于情况2: 2>&1
它的意思用C实现为: dup2(1,2); close(1); 之后写往2的数据相当于写给1。
再高端点的:4>&1 写4相当于写给1, 4 这些前面各位都已经介绍了,&如果放在最后意思是让命令后台运行。
重定向从微观角度来讲,只有2种:
1,描述符定向到文件
2,描述符定向到描述符
对于情况1: > /dev/null
这里隐藏了一个默认参数,完整命令为: 1 > /dev/null
其C实现为:fd=open("/dev/null",O_TRUNC|O_WRONLY|O_CREAT,mode); dup2(fd,1); close(fd);
之后写往1的数据就写入了/dev/null这个文件。
对于情况2: 2>&1
它的意思用C实现为: dup2(1,2); close(1); 之后写往2的数据相当于写给1。
再高端点的:4>&1 写4相当于写给1, 4 这些前面各位都已经介绍了,&如果放在最后意思是让命令后台运行。
|
http://blog.csdn.net/userguanguan/article/details/6968141
这上面有详细的讲解,不过楼上几位讲得已经很清楚了.
这上面有详细的讲解,不过楼上几位讲得已经很清楚了.
|
会屏蔽输出
标准输出到/dev/null了,错误也到标准输出到/dev/null了
所以屏幕上就不会有输出了
有的脚本会有很多输出,屏幕就在那等待输出,可能会造成僵尸进程。。。
所以一般计划任务有需求这个都会根据脚本加上 > /dev/null 2>1&