无法理解“>>”和“&”正在这个BASH系列中

时间:2012-10-24 06:38:56

标签: bash shell

我正在尝试调试为在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 &

如果有人能告诉我这条线路在做什么,我将不胜感激。

3 个答案:

答案 0 :(得分:4)

您的发布行中发生了三件事。

这会将stdout附加到/ dev / null:

>> /dev/null

这里,文件描述符2(stderr)指向文件描述符1(stdout)。由于bash处理从右向左重定向,因此在stdout重定向之后这一点很重要。

2>&1

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

答案 1 :(得分:1)

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

>>/dev/null 

这会将进程的标准输出重定向到空设备。由于dev / null会丢弃写入它的所有数据,因此您只是丢弃标准输出。如果您愿意,可以在此处使用其他文件

2>&1

这说:同样重定向标准错误。所以你也在丢失错误流

最后:

&

这将从终端实例中分离进程。试试看它是如何工作的:

gedit

gedit &

答案 2 :(得分:0)

>>表示您要将命令的输出重定向(追加)到某个位置。 在您的情况下,您希望将输出附加到/dev/null

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

以下内容会执行相同的2>> /dev/null 1>> /dev/null &,但您可以看到它更长,而且不像您的那样可读。