5

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

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

-between wavandtrim是输出文件,between -and--resample 8$DIRNAME/${NOEXT}.mp3输入文件。

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

4

4 回答 4

6

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

这是来自sox 联机帮助页

SoX 可以通过使用特殊文件名“-”用于简单的管道操作,如果使用它代替输入文件名,将导致 SoX 将从“标准输入”(stdin)读取音频数据,如果使用的输出文件名,将导致 SoX 将音频数据发送到“标准输出”(stdout)。请注意,使用此选项时,还必须给出文件类型(请参阅下面的 -t)。

于 2012-10-01T01:16:47.520 回答
2

按照惯例,unix 和朋友使用-来表示标准输入和标准输出。

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

于 2012-10-01T01:17:09.163 回答
2

在您的示例中,它与

/dev/stdin

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

于 2012-10-01T01:23:08.980 回答
2

“-”通常用作约定而不是文件名来表示“使用标准输入(而不是读取文件)或标准输出(而不是写入文件)”。这不是命令外壳(即 bash)的特性,因此从这个意义上说,它不是特殊字符。它是某些命令的一个功能(例如在您的情况下是“sox”和“lame”),并且通过管道链接这些命令非常有用。

于 2012-10-01T01:23:37.433 回答