2012-10-24 73 views
1

我正在尝试调试在BASH中使用的脚本。我有点困惑,以下行是干什么的。无法理解这个BASH行中的“>>”和“&”在做什么

ffmpeg -threads 1 -f yuv4mpegpipe -i ./tmp/dvd-slideshow_temp_3203/dvdss-pipe-3203 -target ntsc-dvd -r 29.97 -an -aspect 4:3 -s 480 -y -bf 2 -f mpeg2video ./tmp/dvd-slideshow_temp_3203/video.mpg >> /dev/null 2>&1 & 

真的有我困惑的一点是最后一位:

>> /dev/null 2>&1 & 

我将不胜感激,如果有人能告诉我这行做。

+0

http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/ – squiguy

回答

0

>>表明您希望将命令的输出重定向(附加)的东西。 在你的情况下,你想追加输出到/dev/null

下一部分2>&1意味着你重定向标准错误管标准输出管道。最后的&表示您想将您的命令发送到后台。

以下将做同样的2>> /dev/null 1>> /dev/null &但你可以看到它更长,不像你的可读性。

4

您的发布行中有三件事情发生。

此追加标准输出到/ dev/null的:

>> /dev/null 

这里,文件描述符2(错误)被引导到文件描述符1(标准输出)。由于bash会从右向左处理重定向,所以重要的是在stdout重定向之后。

2>&1 

最后,&在后台运行该命令。

1

看看这个:http://www.gnu.org/software/bash/manual/bashref.html

>>/dev/null 

这个重定向进程的标准输出到空设备。由于dev/null放弃了写入它的所有数据,因此您只是丢弃标准输出。同样重定向标准错误:如果你觉得喜欢它

2>&1 

此说,你可以在这里使用一个不同的文件来代替。所以,你也远离夹紧的错误流

最后:

& 

这detatches从终端实例的进程。试试这个,看看它是如何工作的:

gedit 

gedit & 
+0

“从终端实例中分离出进程” - 并不完全,这就是'nohup '是为了。 '&'在后台推送作业,但是当终端实例关闭时,作业也是如此。 –