管道在模拟文件的命令行?

时间:2011-05-02 01:11:26

标签: bash command-line pipe

我以前见过这种技术,但不知道它叫什么,忘记确切的语法。假设我需要将文件传递给一个程序,例如:command<输入文件。但是,我想直接将输入文件的这些行传递给没有中间输入文件的命令。它看起来像这样,但它不起作用:

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

有人可以告诉我这叫做什么以及怎么做?

4 个答案:

答案 0 :(得分:9)

这称为Process Substitution

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

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

答案 1 :(得分:2)

Herestring。

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

或者heredoc。

command << EOF
line 1
line 2
line 3
EOF

答案 2 :(得分:1)

我认为你指的是“这里的文件”。喜欢这个

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

答案 3 :(得分:0)

怎么样:

cat myfile.txt | head -n3 | command