我以前见过这种技术,但不知道它叫什么,忘记确切的语法。假设我需要将文件传递给一个程序,例如:command<输入文件。但是,我想直接将输入文件的这些行传递给没有中间输入文件的命令。它看起来像这样,但它不起作用:
command < $(file-line1; file-line2; file-line3)
有人可以告诉我这叫做什么以及怎么做?
答案 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