Почему в этом случае позиция присваивания вызывает бесконечный цикл? - PullRequest
1 голос
/ 12 ноября 2019

Может кто-нибудь объяснить, почему позиция следующего назначения вызывает бесконечный цикл?

Я пишу тестовую программу для экспериментов с конвейерами, использующими этот скрипт, который запускается на 2 терминалах, итретий терминал, который просто отражается на pipe1 и pipe2. Если я добавлю receive = "$ input" сразу после условия IF, то результатом будет бесконечный цикл на двух терминалах. Однако, если это назначение помещено в конец, оно работает отлично?

#!/bin/bash 

received="null"
while true; do
        read input < "$1" #this is either pipe1 or pipe2
        if [ "$input" != "$received" ]; then
                echo "$input"
                echo "$input" > "$2" #again, either pipe1 or pipe2
                received="$input"
        fi
done

В терминале 1 я запускаю:

./r_w_test.sh pipe1 pipe2

И в терминале 2 я бегу:

./r_w_test.sh pipe2 pipe1

А затем в третьем терминале я бы запустил:

echo "hi" > pipe1 

и т. Д. И т. Д.

Почему я получаю бесконечный цикл, когда назначение помещено здесь :

...
if [ "$input" != "$received" ]; then
        received="$input"
        echo "$input"
        echo "$input" > "$2"
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...