【问题标题】:Unix pipes and positional argumentsUnix 管道和位置参数
【发布时间】:2012-10-01 01:12:40
【问题描述】:

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

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 之间的- 是输入文件。

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

【问题讨论】:

    标签: bash unix pipe


    【解决方案1】:

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

    这是来自sox manpage

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        在您的示例中,它与

        相同
        /dev/stdin
        

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2012-04-11
            • 2020-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-15
            相关资源
            最近更新 更多