Как создается столбец [OK] или [FAIL]?

Я хотел бы знать, как оболочка может отображать последний столбец (OK или FAIL), как показано на этом изображении

enter image description here

(из этот вопрос Перезагрузить сервер из командной строки? .)

Может ли кто-нибудь помочь мне понять, как это делается?

4
задан 13 April 2017 в 05:24

2 ответа

Что это?

Те необычные сообщения OK/сбоя, что Вы видите, являются на самом деле сообщениями загрузки, которые производятся к TTY1 во время процесса начальной загрузки. Как правило, в то время как процесс начальной загрузки продолжается, Вы видите те сообщения вместо симпатичного логотипа начальной загрузки путем нажимания клавиши Esc . То же самое может быть сделано во время процесса завершения работы. Экран, как обычно предполагается, очищен, после того как процесс начальной загрузки завершен, но это не всегда происходит (по ряду причин, один из которых мог быть то, что сообщения появляются на одной скорости или скорости в бодах и TTY1, затем установлен быть на другой скорости в бодах)

Для ответа на вопрос, который технически не является оболочкой, а отдельной программой, а именно, systemd init система, которая выпускает те сообщения (в пред15.04, который был бы upstart init система). Если Вы только начинаете изучать Linux, не волнуйте приблизительно systemd, но это - очень хорошая тема для знания, потому что systemd то, что предположило для запуска всех важных сервисов на систему.

, Как я могу сделать это один?

Технические аспекты записи этих типов сообщений просты: можно использовать "\r" управляющий символ и специальные escape-последовательности для создания вывода определенного цвета. Эти управляющие символы могут использоваться на любом языке программирования, является ли это C или сценарием оболочки. На самом деле я ответил связанный вопрос прежде и записал простой сценарий, чтобы продемонстрировать, как можно распечатать сообщение о состоянии. Что касается цвета, см. статью Проекта Документации Linux приблизительно колоризация сценарии

8
ответ дан 23 November 2019 в 11:37

Программа, отображающая тот вывод, не является оболочкой. Это systemd, который записан в C.

то, Что, вероятно, делает программа, определяют ширину экрана/окна (технически "число столбцов", т.е. пробелы, доступные для символов), и затем выравнивание по правому краю столбец OK/fail соответственно.

, Чтобы сделать то же самое в Bash, Вы могли заставить столбцы от $COLUMNS , затем использование printf печатать вывод с выравниванием по правому краю . Например:

print_status(){
    local message="$1"
    local status="$2"

    # Get the number of columns, but subtact 8 to leave space for the status.
    local columns=$((COLUMNS-8))

    # Print left-aligned message and right-aligned status.
    printf "%-*s [%s] \n" "$columns" "$message" "$status"
}

# Print a status.
print_status "Doing something..." " OK " 

# Print another status.
print_status "Doing something else..." "fail"

Для колоризации, Вы могли сделать это:

print_status "Doing something else..." \e[31mfail\e[m'
7
ответ дан 23 November 2019 в 11:37

Другие вопросы по тегам:

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