【问题标题】:Piping in on the command line simulating a file?在命令行上模拟文件?
【发布时间】:2011-08-16 16:41:27
【问题描述】:

我以前见过这种技术,但不知道它叫什么并且忘记了确切的语法。假设我需要将一个文件传递给一个程序,例如: command

command < $(file-line1; file-line2; file-line3)

谁能告诉我这叫什么以及怎么做?

【问题讨论】:

  • 鉴于刚刚出现的答案千差万别,我认为可以肯定地说您的问题不太清楚......
  • 我也不记得叫什么了。但我的谷歌查询使用的词与这篇文章的标题和正文中的词相似。所以这对我来说是第一次成功。

标签: bash command-line pipe


【解决方案1】:

这叫Process Substitution

command < <(printf "%s\n" "file-line1" "file-line2" "file-line3")

通过上述,command 会认为它正在输入一个名称与/dev/fd/XX 很相似的文件,其中“XX”是某个数字。正如您所提到的,这是一个临时文件(实际上是一个文件描述符),但它将包含您传递给 printf 命令的 3 行。

【讨论】:

    【解决方案2】:

    这里的字符串。

    command <<< $'line 1\nline 2\nline 3\n'
    

    或heredoc。

    command << EOF
    line 1
    line 2
    line 3
    EOF
    

    【讨论】:

    • 请注意 herestringsbashisms,即不符合 POSIX 标准; heredocs 是合规的,应该可以在任何地方使用。 (mywiki.wooledge.org/Bashism)
    【解决方案3】:

    我认为您指的是“此处的文档”。像这样

    #!/bin/sh
    cat <<EOF
    This is
    the 
    lines.
    EOF
    

    【讨论】:

      【解决方案4】:

      怎么样:

      cat myfile.txt | head -n3 | command
      

      【讨论】:

        猜你喜欢
        • 2012-11-13
        • 2012-06-19
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        • 2016-07-19
        • 2014-02-25
        相关资源
        最近更新 更多