2012-10-24 72 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 '是爲了。 '&'在後臺推送作業,但是當終端實例關閉時,作業也是如此。 –