Bash вывод на ту же строку при сохранении столбца - PullRequest
0 голосов
/ 25 февраля 2019

Хорошо, сначала это будет казаться основным вопросом, но, пожалуйста, выслушайте меня.Это более сложно, чем кажется из названия!

Вот цель того, что я пытаюсь сделать.Я хотел бы вывести на консоль, аналогичную загрузке 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)"

1 Ответ

0 голосов
/ 25 февраля 2019

Нет особой причины, по которой все строки printf должны быть напечатаны вместе, если только вы не беспокоитесь, что вызываемый вами код будет перемещать курсор.

Переупорядочение вашего примера:

printf "%-50s " " Validating and sanitizing input..."

VALIDATE $HOST

if [ -z "$ERROR" ]; then
    printf "%10s\n" "[$GREEN   OK   $RESET]";
else
    printf "%10s\n" "[$RED  FAIL  $RESET] - $ERROR"
    echo
    exit
fi

Понятия не имею, что содержит $ERROR и где он должен отображаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...