Como funciona o sucesso nas funções init.d do RHEL?

3

Estou usando um Amazon Linux AMI, que é uma derivação do RHEL, e ele usa o SysVint para ele é services . Eu não sou um usuário experiente do Linux e estou aprendendo mais sobre services , então me deparei com o script functions em /etc/init.d/functions e eu simplesmente não entendo como ele é success e failure functions funcionam (há outros como warning também, mas eles são apenas o mesmo princípio e código).

Meu script functions pode ser encontrado aqui e a função success tem esta aparência:

# Log that something succeeded
success() {
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
  return 0
}

echo_success() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"  OK  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 0
}

Francamente, não entendo a parte "${LSB:-}" , pois não consigo encontrar essa variável LSB em nenhum lugar, mas a parte importante é como os scripts parecem estar usando a função success , por exemplo, a última linha da função daemon é:

[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"

O que não faz sentido para mim porque $"$base startup" não será echoed , pois success não verifica parâmetros para echo depois disso. Acho que a string está sendo registrada, mas, novamente, também não consigo ver como seria registrada.

Eu acho que isso é realmente falho ou eu simplesmente não estou entendendo algo .... a natureza da função success é imprimir um [ OK ] inline verde com o cursor, que está causando algumas saídas estranhas em alguns scripts . Por exemplo, meu script tomcat imprime [ OK ] no cursor do meu terminal, em vez de em uma nova linha na parte superior do meu cursor, o que é realmente estranho:

O texto deveria ser algo como tomcat is running... [ OK ] , mas desde que foi impresso na linha do meu terminal, meu nome de usuário e IP cortaram a maior parte.

Então, estou entendendo errado ou a função success dos serviços do RHEL está sendo usada incorretamente em todo o lugar?

    
por mFeinstein 09.05.2017 / 23:34

1 resposta

2

Você não está errado, mas eu não iria tão longe a ponto de dizer que as funções estão sendo usadas incorretamente .

Frankly I don't understand the "${LSB:-}" part since I can't find this LSB variable anywhere

Nem posso encontrar $ LSB sendo definido em qualquer lugar. Eu só posso especular por que esta variável está sendo verificada; o teste completo é:

[ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success

O resultado do teste é executar echo_success se o valor da variável BOOTUP não for "detalhado" e a variável LSB não for definida. A definição da sintaxe ${varname:-text} é:

${parameter:-word} Use Default Values.
If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

Aqui, não há "palavra" após o traço, portanto, se $ LSB não estiver definido ou nulo, toda a expansão resultará em (nada), o que permitiria que o teste -z passasse.

A minha especulação é que a lógica está lá no caso de você querer mudar o comportamento do script de inicialização para que não execute estas funções success () ou failure () .

Em segundo lugar,

how the scripts appear to be using the success function, for example the last line of the daemon function is:

[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"

Você está correto em que esses parâmetros são passados para as funções, mas não usados. É inofensivo passar parâmetros que não são usados - apenas inconsistentes / confusos! Minha especulação é que as versões anteriores dessas funções examinaram (talvez registraram?) Os parâmetros passados.

Observe que a função init_crypto() chama os parâmetros success () (ou failure ()) sem !

    
por 12.05.2017 / 18:22