我正在尝试调试为在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 :(得分: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 &
,但您可以看到它更长,而且不像您的那样可读。