Como a coluna [OK] ou [FAIL] é criada?

3

Eu gostaria de saber como o shell poderia exibir a última coluna (OK ou FAIL) como mostrado nesta imagem

(desta pergunta Reinicie um servidor da linha de comando? .)

Alguém poderia me ajudar a descobrir como isso é feito?

    
por Sandra Ross 08.11.2016 / 04:44

2 respostas

8

Quais são esses?

Essas mensagens sofisticadas OK / FAIL que você vê são, na verdade, mensagens de inicialização que são enviadas para TTY1 durante o processo de inicialização. Normalmente, enquanto o processo de inicialização está em andamento, você pode ver essas mensagens em vez do belo logotipo de inicialização pressionando a tecla Esc . A mesma coisa pode ser feita durante o processo de desligamento. A tela normalmente deve ser apagada assim que o processo de inicialização estiver completo, mas isso nem sempre acontece (por vários motivos, um dos quais pode ser que as mensagens apareçam em uma velocidade ou taxa de transmissão e o TTY1 seja definido como estar em taxa de transmissão diferente)

Para responder à sua pergunta, isso tecnicamente não é um shell, mas um programa separado, ou seja, o sistema systemd init que coloca essas mensagens (em pré-15.04 que seria upstart init system). Se você está apenas começando a aprender Linux, não se preocupe com systemd , mas este é um tópico muito bom para saber porque systemd é o que supostamente deve iniciar todos os serviços importantes no sistema.

Como posso fazer isso sozinho?

Os aspectos técnicos da escrita desses tipos de mensagens são simples: você pode usar o caractere de controle "\ r" e seqüências de escape especiais para fazer a saída de determinada cor. Esses caracteres de controle podem ser usados em qualquer linguagem de programação, seja C ou shell script. Na verdade, eu respondi a uma pergunta relacionada antes e escrevi um script simples para demonstrar como alguém pode imprimir a mensagem de status . Quanto à cor, consulte o artigo do Projeto de Documentação do Linux sobre colorir os scripts

    
por Sergiy Kolodyazhnyy 08.11.2016 / 06:43
7

O programa que exibe essa saída não é o shell. É systemd , que está escrito em C.

O que o programa provavelmente faz é determinar a largura da tela / janela (tecnicamente "número de colunas", ou seja, espaços disponíveis para caracteres) e, em seguida, alinhar à direita a coluna OK / fail de acordo.

Para fazer a mesma coisa no Bash, você pode obter colunas de $COLUMNS , depois use printf para imprimir a saída com o alinhamento à direita . Por exemplo:

print_status(){
    local message=""
    local status=""

    # 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"

Para colorização, você pode fazer isso:

print_status "Doing something else..." $'\e[31mfail\e[m'
    
por wjandrea 08.11.2016 / 05:42