Unix管道和位置参数

5
我将使用 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个回答

6
许多Unix命令行实用程序使用“-”作为简写,表示“不要在这里使用真实文件,而是使用stdin(或stdout)”。Sox是其中之一:
这是来自sox手册的内容:
SoX可以通过使用特殊文件名“ - ”来进行简单的管道操作。如果在输入文件名的位置使用它,SoX将从“标准输入”(stdin)读取音频数据;如果在输出文件名的位置使用它,SoX将向“标准输出”(stdout)发送音频数据。请注意,在使用此选项时,还必须给出文件类型(参见下面的-t)。

2
在你的例子中,与之相同的是
/dev/stdin

尝试使用_替换-,您会看到结果。


2

按照惯例,Unix和类Unix系统使用-表示标准输入和标准输出。

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


2
“-”通常被用作一种惯例来表示“使用标准输入(而不是读取文件)或标准输出(而不是写入文件)”,而不是文件名。这不是命令行解释器(即bash)的特殊功能,因此在这个意义上,它不是一个特殊字符。它是某些命令(比如你使用的“sox”和“lame”)的特性,通过管道链接这些命令非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接