Правильным решением является использование такой подстановки команд:
variable=$(complex_command)
как в
message=$(echo 'hello')
(или, если уж на то пошло, message=hello
в данном случае ).
Ваш конвейер:
echo 'hello' | message=$(</dev/stdin)
или
echo 'hello' | read message
действительно работает. Единственная проблема заключается в том, что используемая вами оболочка будет запускать вторую часть конвейера в подоболочке. Эта подоболочка уничтожается при выходе из конвейера, поэтому значение $message
не сохраняется в оболочке.
Здесь видно, что это работает:
$ echo 'hello' | { read message; echo "$message"; }
hello
... но поскольку среда подоболочки отделена (и исчезла):
$ echo "$message"
(нет выхода)
Одним из решений для вас было бы переключиться на ksh93
, который умнее в этом:
$ echo 'hello' | read message
$ echo "$message"
hello
Другим решением для bash
может быть установка опции оболочки lastpipe
. Это заставит последнюю часть конвейера работать в текущей среде. Однако это не работает в интерактивных оболочках, поскольку lastpipe
требует, чтобы управление заданиями не было активным.
#!/bin/bash
shopt -s lastpipe
echo 'hello' | read message
echo "$message"
git branch
без -a
показывает только локальные ветви.
Вероятно, вы хотите, чтобы git branch -a --contains v0.3
отображались все ветки с github, содержащие указанный тег. Но это может быть менее полезно, чем вы думаете -в нем будет указана ветвь, на которой изначально был создан тег, а также любые ветки, порожденные этой меткой.