2011-05-02 58 views
5

我以前見過這種技術,但不知道它叫什麼,忘記了確切的語法。假設我需要將文件傳輸到程序,如:命令<輸入文件。但是,我想直接將輸入文件的這些行傳送到沒有中間輸入文件的命令中。它看起來像這樣,但它不起作用:在模擬文件的命令行中管道?

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

有人可以告訴我這是什麼,以及如何做到這一點?

+0

鑑於那些剛剛出現的答案野生的變化,我認爲這是肯定地說,你的問題是小於清晰...... – 2011-05-02 01:16:49

+0

我不記得這是什麼稱之爲。但是,我的谷歌查詢使用類似於這篇文章的標題和正文中的文字。所以這對我來說是第一次。 – 2012-12-02 08:05:50

回答

9

這就是所謂的Process Substitution

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

通過以上,command將多認爲它是輸入一個文件名類似/dev/fd/XX其中「XX」是一些數字。正如你所提到的,這是一個臨時文件(實際上是一個文件描述符),但它將包含你傳遞給printf命令的3行。

1

Herestring。

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

或heredoc。

command << EOF 
line 1 
line 2 
line 3 
EOF 
+0

請注意,'herestrings'是'bashisms',即不符合POSIX標準; 'heredocs'是合規的,應該在任何地方工作。 (http://mywiki.wooledge.org/Bashism) – 2011-05-02 01:22:18

1

我想你是指「這裏的文件」。像這樣

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

如何:

cat myfile.txt | head -n3 | command