параллельные циклы без использования подпроцесса

Вообще

В общем случае передача логических значений в функции на любом языке нечитаема. например. calculate_interest 5y 4% true. Читателю остается только гадать, что же является правдой.

Поэтому используйте перечисление:{ per_month, per_year }. Теперь вы можете сделать calculate_interest 5y 4% per_year. Это более читабельно.

В баш

Bash не является статически типизированным, (или строго типизированным, или вообще не имеет значительной части системы типов ), поэтому вы можете передавать множество различных значений. Одни поведут так, другие нет. Нежелательно иметь много разных ценностей, ведущих по одному и тому же пути.

Поэтому добавьте код для проверки того, что ввод является одним из двух допустимых значений. Сделайте это в начале функции, вы не хотите выручать ½ пути, делая что-то.

Что делать, если вам нужно вызвать функцию, которая принимает логическое значение

Итак, кто-то не последовал моему совету, и вы должны вызвать функцию, которая принимает логическое значение. Что вы можете сделать, чтобы сделать ваш код читабельным?

  • Если язык (, такой как Python ), допускает именованные аргументы, например. calculate_interest 5y 4% per_year=True, затем используйте их. Это поможет, но не расскажет вам о значении calculate_interest 5y 4% per_year=False.
  • Если в языке нет именованных аргументов, то единственные варианты — жить с нечитаемым кодом (не вариант ), или оборачивать функции в грамотные функции.
1
03.08.2020, 17:38
1 ответ

Нет; bashне поддерживает параллелизм или многопоточность -таким образом. Подоболочки также не взаимодействуют с переменными друг друга.

Можно передавать информацию из одной подоболочки в другую, используя FIFO или временные файлы.

В качестве примера (просто для начала):

mkfifo hoppa

while true; do
  curl -4 -sf ifconfig.co >> hoppa
  sleep 60
done &

while : ; do
    read -t1 d <> hoppa
    if [ "$d" != "" ] ; then
        echo '+'
        ipread=$d
    else
        echo -n '.'
    fi
    echo $ipread
    sleep 5
done &
3
18.03.2021, 23:15

Теги

Похожие вопросы