我正在组合sox
和lame
来生成新的音乐文件,但为了使用管道在一行上完成所有操作,似乎有必要“标记”输出和输入边界一个-
个字符。我继承了这段代码,让我展示一下。
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
是输入文件。
我正在尝试找到有关此内容的更多信息,例如是否可以使用任何字符,或者-
是否特殊。这叫做什么,是什么让它起作用?
答案 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”),并且通过管道链接这些命令非常有用。