¿Se pueden usar múltiples documentos aquí para proporcionar información a un comando en bash?
$ cat <<<foo <<<bar
bar
$ cat <<EOF1 <<EOF2
> foo
> EOF1
> bar
> EOF2
bar
Obviamente, en ambos casos, el segundo here-doc se usa como stdin y reemplaza la primera referencia. ¿Es la solución usar echo
s en su lugar?
$ cat <(echo -n foo) <(echo bar)
foobar
Además, por alguna razón, usar una combinación no funcionó para mí. ¿Por qué sería eso?
$ cat <<<foo <(echo bar)
bar
$ cat <(echo -n foo) <<<bar
foo
bash
io-redirection
here-document
Gavilán
fuente
fuente
paste
con entradas ficticias. Supongo que puedo pensar en algunos otros escenarios. Si hubiera tenido un script con texto previamente manipulado en algunas variables, entonces podría querer hacer algo para ambos con un comando que solo toma archivos, por ejemplodiff
.cat <<EOF1 <<"EOF2"
.Respuestas:
Tu puedes hacer:
Solo puede haber un stdin, ya que solo hay un descriptor de archivo 0.
es la abreviatura de:
Y:
es:
Debe decidir qué abrir en el descriptor de archivo 0.
Es:
Donde
123
hay un descriptor de archivo para una tubería, y en paralelo, bash se ejecutaecho foo
en otro proceso con el stdout redirigido al otro extremo de la tubería.Una vez que pasa un nombre de archivo a
cat
,cat
ya no lee de stdin. NecesitaríasO:
(
-
es decircat
que lea de stdin).fuente
cat <<EOF
no es exactamente lo mismo quecat /dev/fd/0...
: en el último casocat
ve el nombre del archivo y lo abre.cat
lee desde sufd
0, como si se pasara un argumento de-
o/dev/fd/0
(aunque en Linux (y solo en Linux), abrir/dev/fd/0
no es exactamente como duplicar el descriptor de archivo 0)./dev/fd/3 3<< E1
construcción y ahora me pregunto qué son exactamente los elementos en / dev / fd /. Pensé que de alguna manera aparece mágicamente después de que el proceso abre un archivo en algún lugar del sistema de archivos con la excepción de 1 y 2, que están allí por defecto para cada proceso. Pero en su ejemplo, está utilizando el descriptor de archivo 3 y 4 que no está conectado a ningún archivo real, excepto para esa redirección de entrada. No puedo comprender eso en mi modelo mental de descriptores de archivos. ¿Qué pasa si el proceso quiere abrir otro archivo, sabría que tiene que usar fd 5? ¿Los fds tienen que ser 3, 4, 5 ... o pueden ser cualquier cosa?