2011-05-02 25 views
5

He visto la técnica antes, pero no sé cómo se llama y olvido la sintaxis exacta. Digamos que necesito conectar un archivo a un programa como: comando < entrada-archivo. Sin embargo, quiero pasar directamente estas líneas del archivo de entrada al comando sin el archivo de entrada intermedio. Parece algo como esto, pero no funciona:¿Tubería en la línea de comandos que simula un archivo?

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

¿Alguien me puede decir cómo se llama y cómo hacerlo?

+0

Dada la variación natural en las respuestas que solo han aparecido, creo que es seguro decir que su pregunta es menor que claro ... –

+0

que no recordaba lo que era llamado cualquiera. Pero mi consulta de google utilizó palabras que eran similares a las palabras en el título y el cuerpo de esta publicación. Así que este fue un primer golpe para mí. –

Respuesta

9

Esto se llama Process Substitution

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

Con lo anterior, command va a pensar que sea de entrada un archivo con un nombre muy parecido /dev/fd/XX donde 'XX' es un número. Como mencionó, este es un archivo temporal (en realidad un descriptor de archivo) pero contendrá las 3 líneas que pasó al comando printf.

1

Herestring.

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

O heredoc.

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

Tenga en cuenta que 'herestrings' son' bashisms', es decir, que no cumplen con POSIX; 'heredocs' son compatibles y deberían funcionar en todas partes. (http://mywiki.wooledge.org/Bashism) –

1

Creo que se refiere a un "documento aquí". Al igual que este

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

¿Qué tal:

cat myfile.txt | head -n3 | command 
Cuestiones relacionadas