Я пытаюсь сохранить вывод из трубы в переменную.
После прочтения этого поста (доступа к выводу канала Bash с помощью «read») у меня возникли некоторые сомнения, вспомнив, удастся ли мне когда-либо добиться этого в системе Unix.
Затем я обнаружил этот пост (« Как перебрать имена файлов, возвращаемых функцией find?»), И мне напомнили, что он работает, иногда используя read -r <varname>
.
Среда:
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.
Попытки:
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
Я также попробовал это в собственном процессе и окне bash.exe
:
User@Computer /cygdrive/...
$ echo "hi" | read var;echo $var;
То же самое делается в "Bash на Ubuntu в Windows" bash.exe
:
echo "hi" | read var;echo $var;
До сих пор нет успешного результата задания.
Я знаю, что могу обойти этот метод, вместо этого, вероятно, используя $()
или стрелки перенаправления.
Есть ли способ сделать это с помощью этого метода командной строки read
в Windows?
Обновить
На некоторые ответы я знал, что некоторые будут публиковать альтернативы, такие как $()
. Вот почему я намеренно уже упомянул этот метод, включая ссылку, где несколько из них уже были перечислены, а также специально спросил, есть ли способ использовать утилиту read
строки для хранения ввода в переменную, не используя перенаправление, а вместо этого передавая данные через цепочка команд, как я делал раньше в других системах, но на этот раз в Windows.