Unix管道和位置参数

时间:2012-10-01 01:12:40

标签: bash unix pipe

我正在组合soxlame来生成新的音乐文件,但为了使用管道在一行上完成所有操作,似乎有必要“标记”输出和输入边界一个-个字符。我继承了这段代码,让我展示一下。

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

-wav之间的trim是输出文件,---resample 8之间的$DIRNAME/${NOEXT}.mp3是输入文件。

我正在尝试找到有关此内容的更多信息,例如是否可以使用任何字符,或者-是否特殊。这叫做什么,是什么让它起作用?

4 个答案:

答案 0 :(得分:5)

许多Unix命令行实用程序使用“ - ”作为简写来表示“不要在这里使用真实文件,而是使用stdin(或stdout)”。 Sox是这些计划之一:

这来自sox manpage

  

SoX可以通过使用特殊的方法在简单的管道操作中使用   filename' - ',如果用于代替输入文件名,将导致   SoX将从'标准输入'(stdin)读取音频数据,如果是,则读取   用来代替输出文件名,会导致SoX发送音频   数据到'标准输出'(标准输出)。请注意,使用此选项时,   

还必须提供文件类型(参见下面的-t)

答案 1 :(得分:2)

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

它不是100%通用的,但是它被广泛使用。

答案 2 :(得分:2)

在您的示例中,它与

相同
/dev/stdin

尝试用它替换你的-,你会看到。

答案 3 :(得分:2)

“ - ”通常用作约定而不是文件名来表示“使用标准输入(代替或读取文件)或标准输出(而不是写入文件)”。这不是命令shell(即bash)的一个特性,所以从这个意义上讲,它不是一个特殊字符。它是某些命令的一个特性(比如你的情况是“sox”和“lame”),并且通过管道链接这些命令非常有用。

相关问题