Estoy tratando de almacenar la salida de una tubería en una variable.
Después de leer este post ( Accediendo a la salida de una tubería Bash con 'leer' ), Tenía algunas dudas para recordar si alguna vez tuve éxito en hacer eso, en un sistema Unix.
Entonces encontré este post ( ¿Cómo hacer un bucle a través de los nombres de archivos devueltos por encontrar? ), y se le recordó que funciona, a veces utilizando read -r <varname>
también.
Ambiente:
User@Computer /cygdrive/...
$ echo $SHELL
/bin/bash
User@Computer /cygdrive/...
$ echo $BASH_VERSION
4.4.5(1)-release
User@Computer /cygdrive/...
$ uname -a
CYGWIN_NT-10.0 Computer 2.6.1(0.305/5/3) 2016-12-16 11:55 x86_64
User@Computer /cygdrive/...
$ read --help
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Read a line from the standard input and split it into fields.
Intentos de
User@Computer /cygdrive/...
$ echo $var
User@Computer /cygdrive/...
$ echo "hi" | read var
User@Computer /cygdrive/...
$ echo $var
User@Computer /cygdrive/...
$ echo "hi" | read -r var
User@Computer /cygdrive/...
$ echo $var
User@Computer /cygdrive/...
$ read var
hi
User@Computer /cygdrive/...
$ echo $var
hi
User@Computer /cygdrive/...
$ echo "hi" | cat
hi
User@Computer /cygdrive/...
$ echo -e '1\n2\n3\n' | xargs
1 2 3
También probé esto en bash.exe
Proceso propio y ventana:
User@Computer /cygdrive/...
$ echo "hi" | read var;echo $var;
También haciendo lo mismo en el "Bash en Ubuntu en Windows" bash.exe
:
echo "hi" | read var;echo $var;
Todavía no hay resultado exitoso de la tarea.
Soy consciente de que puedo evitar este método, en lugar de eso, probablemente use $()
o las flechas de redireccionamiento.
¿Hay una manera de hacer esto usando este read
¿Método de comando de línea en Windows?
Actualizar
Para algunas de las respuestas, sabía que algunas postearían alternativas como $()
. Esta es la razón por la que ya mencioné este método intencionalmente, incluido un enlace donde ya se enumeraron varios, y pregunté específicamente si había alguna forma de usar el read
Utilidad de línea para almacenar la entrada en una variable, no utilizando redireccionamiento, sino canalizando datos a través de una cadena de comandos, como lo había hecho antes en otros sistemas, pero esta vez en Windows.
something | while read var; do use $var; done
porque todo el bucle while forma el extremo derecho de la tubería y se ejecuta en una subshell; el ajuste de var es ido después del final del bucle while. @SharuzzamanAhmatRaslan: aunque bash 4.2+ (como en esta Q) tiene shopt lastpipe para cambiar esto en un script.
bash
Alrededor, y quiero ser más compatible con ellos.