Можно ли разрешить фоновому процессу непрерывно выводить на терминал?

(1) Когда вы проверяете на ["Да" ], а затем на ["Нет" ], вам все равно нужно сравнивать с th в обеих частях:

[ "$th" = "yes" ] || [ "$th" = "Yes" ]

и

[ "$th" = "нет" ] || [ "$th" = "нет" ]

(2) Для раздела, если [ "$th" = "да" ] || [ "$th" = "да" ] , вам нужно расширить этот блок кода, чтобы включить все до проверки на No и использовать elif в этой точке, чтобы объединить это как один большой составной if-elif-fi оператор.

Вот он с исправлениями, упомянутыми выше:

echo -n "Are you thirsty?"
read th

if [ "$th" = "yes" ] || [ "$th" = "Yes" ]; then

    echo "What would you like to drink?"
    read th

    if [ "$th" = "water" ]; then
      echo "Clear crisp and refreshing."
    elif [ "$th" = "beer" ]; then
      echo "Let me see some ID."
    elif [ "$th" = "wine" ]; then
      echo "One box or Two?"
    else
      echo "Coming right up."
    fi

elif [ "$th" = "no" ] || [ "$th" = "No" ]; then
    echo "Come back when you are thirsty."
fi
5
06.05.2017, 00:36
2 ответа

В принципе, да. Приложение может работать в фоновом режиме, которое выводит что-то на stdout:

ping 8.8.8.8 &> /dev/stdout &

Итак:

  • &> отправить stdout и stderr на stdout,
  • & в конце делает ping работает в фоновом режиме.

Но, насколько я правильно понимаю ваш вариант использования, лучше всего будет иметь приложение watch [1] на переднем плане. Он периодически запускает команду, указанную в качестве аргумента, и представляет результаты ее выполнения.

0
27.01.2020, 20:37

Я рекомендую GNU экран для этого. Сначала запустите новый экземпляр экрана:

$ screen

Затем сделайте разделение с помощью Ctrl+A Shift+S . Вы можете изменить размер верхней части с помощью команды resize. Я нашел высоту 9 подходящей для cal:

Ctrl+A :resize 9

Затем используйте любую команду, которая постоянно производит вывод. Я не использую watch и даже не использую его на многих системах, но

while true; do cal; sleep 3; done

работает так же хорошо.

Затем Ctrl+A Tab перемещает вас к другой (нижней) части разделения. Наконец, Ctrl+A C открывает новую оболочку, в которой вы можете выполнять команды без вмешательства другой части разделения.


Если вы хотите, чтобы это происходило автоматически, вы можете использовать .screenrc:

screen /bin/sh -c 'while true; do cal; sleep 3; done'
split
resize 9
focus
screen

См. screen(1) для полного описания команд и возможного вдохновения для альтернативных конфигураций.

7
27.01.2020, 20:37

Теги

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