2012-10-01 94 views
4

我將soxlame組合起來生成一個新的音樂文件,但爲了使用管道在一行上完成所有操作,似乎需要用-字符「標記」輸出和輸入邊界。我已經繼承了這個代碼,所以讓我展示一下。Unix管道和位置參數

sox $DIRNAME/$BASENAME -e signed-integer -r 8000 -c 2 -t wav - trim $POSITIONS | lame -v -V4 --resample 8 - $DIRNAME/${NOEXT}.mp3 

wavtrim之間的-是輸出文件,和--resample 8$DIRNAME/${NOEXT}.mp3之間的-是輸入文件。

我試圖找到關於此的更多信息,例如是否可以使用任何字符,或者如果-是特殊的這種方式。這是什麼叫,什麼使它的工作?

回答

5

許多Unix命令行實用程序使用「 - 」作爲簡寫,表示「不要在此處使用真實文件,而要使用stdin(或stdout)」。 Sox是其中一個程序:

這是從sox manpage

SOX可以在簡單的流水線作業,通過使用特殊 文件名中使用「 - 」,如果在地方的輸入文件名的使用,將導致 SoX將從「標準輸入」(stdin)讀取音頻數據,並且如果使用 代替輸出文件名,SoX會將音頻 數據發送到「標準輸出」(stdout)。請注意,在使用此選項時,還必須提供文件類型(請參見下面的-t) 。

2

按照慣例,unix和朋友使用-來表示stdin和stdout。

它不是100%通用,但它是一個相當廣泛的使用。

2

在你的榜樣,這是同樣的事情

/dev/stdin 

嘗試用它來代替你的-,你會看到的。

2

「 - 」通常用作約定而不是文件名來表示「使用標準輸入(替代或讀取文件)或標準輸出(而不是寫入文件)」。這不是命令shell(即bash)的一個特性,所以從這個意義上說,它不是一個特殊字符。這是一些命令的特點(就像你的情況「sox」和「lame」),並且通過管道鏈接這些命令非常有用。