Как получить информацию через некоторое время l oop после канала в bash - PullRequest
0 голосов
/ 21 апреля 2020

Из этого тривиального примера:

$ x="ls output: "
$ ls | while read line; do x="$x $line"; echo $x; done
ls output: a
ls output: a b
ls output: a b c
ls output: a b c d
$ echo $x
ls output:

кажется, что символ канала запускает новую оболочку, которая получает копию переменной x, но в конце канала значение x внутри этого значения не копируется обратно во внешнюю оболочку.

Есть ли какой-нибудь способ, которым я могу получить его?

Примечание: я знаю, что есть намного лучшие / более простые способы получить эта конкретная вещь сделана, но это только упрощенный пример. Мой вопрос, как получить информацию через некоторое время l oop после трубы.

1 Ответ

2 голосов
/ 21 апреля 2020

Когда управление заданиями отключено и включена опция lastpipe; последний компонент конвейера запускается в текущей среде выполнения. См

$ x=foo
$ set +m # disables job control
$ shopt -s lastpipe
$ echo | x=bar
$ echo $x
bar
...