Хорошо, сначала это будет казаться основным вопросом, но, пожалуйста, выслушайте меня.Это более сложно, чем кажется из названия!
Вот цель того, что я пытаюсь сделать.Я хотел бы вывести на консоль, аналогичную загрузке Linux.
Operating system is doing something... [ OK ]
Теперь это может показаться очевидным ... Просто используйте printf и установите столбцы.Здесь первая проблема.Консоль должна сначала распечатать действие
Operating system is doing something...
Затем она должна фактически выполнить эту работу, а затем продолжить, выводя в ту же строку с [OK].
Казалось бы, это легко сделать с помощью printf.Просто выполните работу (в этом случае вызовите функцию) и верните условную проверку, а затем завершите выполнение printf для вывода либо [OK], либо [FAIL].Технически это работает, но я столкнулся с МНОЖЕСТВОМ осложнений при этом.Это потому, что функция должна вызываться внутри подоболочки, и я не могу передать определенные переменные, которые мне нужны.Итак, printf отсутствует.
Как насчет использования echo -n?Это должно работать правильно?Отобразите первую часть, запустите функцию, затем продолжите эхо, основываясь на возврате к той же строке.Проблема с этим решением заключается в том, что я больше не могу сохранить форматирование столбца, которое я могу с помощью printf.
Operating system is doing something... [ OK ]
Operating system is doing something else... [ OK ]
Short example... [ OK ]
Есть предложения, как я могу исправить любую из этих проблем, чтобы получить рабочее решение?Спасибо
Вот еще один способ, который я пробовал с printf.Это создает иллюзию работы, но метод на самом деле несовершенен, потому что он не дает индикации прогресса, то есть функция запускается раньше, чем когда-либо выводит информацию о работе функции.«Эй, я делаю вещи» печатается сразу с сообщением «Эй, я сделал».В результате его бессмысленно.
VALIDATE $HOST; printf "%-50s %10s\n" " Validating and sanitizing input..." "$(if [ -z "$ERROR" ]; then echo "[$GREEN OK $RESET]"; else echo "[$RED FAIL $RESET] - $ERROR"; echo; exit; fi)"