我以前見過這種技術,但不知道它叫什麼,忘記了確切的語法。假設我需要將文件傳輸到程序,如:命令<輸入文件。但是,我想直接將輸入文件的這些行傳送到沒有中間輸入文件的命令中。它看起來像這樣,但它不起作用:在模擬文件的命令行中管道?
command < $(file-line1; file-line2; file-line3)
有人可以告訴我這是什麼,以及如何做到這一點?
我以前見過這種技術,但不知道它叫什麼,忘記了確切的語法。假設我需要將文件傳輸到程序,如:命令<輸入文件。但是,我想直接將輸入文件的這些行傳送到沒有中間輸入文件的命令中。它看起來像這樣,但它不起作用:在模擬文件的命令行中管道?
command < $(file-line1; file-line2; file-line3)
有人可以告訴我這是什麼,以及如何做到這一點?
這就是所謂的Process Substitution
command < <(printf "%s\n" "file-line1" "file-line2" "file-line3")
通過以上,command
將多認爲它是輸入一個文件名類似/dev/fd/XX
其中「XX」是一些數字。正如你所提到的,這是一個臨時文件(實際上是一個文件描述符),但它將包含你傳遞給printf
命令的3行。
Herestring。
command <<< $'line 1\nline 2\nline 3\n'
或heredoc。
command << EOF
line 1
line 2
line 3
EOF
請注意,'herestrings'是'bashisms',即不符合POSIX標準; 'heredocs'是合規的,應該在任何地方工作。 (http://mywiki.wooledge.org/Bashism) – 2011-05-02 01:22:18
我想你是指「這裏的文件」。像這樣
#!/bin/sh
cat <<EOF
This is
the
lines.
EOF
如何:
cat myfile.txt | head -n3 | command
鑑於那些剛剛出現的答案野生的變化,我認爲這是肯定地說,你的問題是小於清晰...... – 2011-05-02 01:16:49
我不記得這是什麼稱之爲。但是,我的谷歌查詢使用類似於這篇文章的標題和正文中的文字。所以這對我來說是第一次。 – 2012-12-02 08:05:50