1

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

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

4

3 回答 3

4

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

这会将标准输出附加到 /dev/null:

>> /dev/null

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

2>&1

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

于 2012-10-24T06:44:43.490 回答
1

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

>>/dev/null 

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

2>&1

这说:同样重定向标准错误。所以你也抛弃了错误流

最后:

&

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

gedit

gedit &
于 2012-10-24T06:47:32.697 回答
0

>>表示您希望将命令的输出重定向(附加)到某些东西。在您的情况下,您希望将输出附加到/dev/null.

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

以下内容会做同样的事情,2>> /dev/null 1>> /dev/null &但你可以看到它更长而且不像你的那样可读。

于 2012-10-24T07:43:28.383 回答