Estou fazendo um estudo de código /lib/lsb/init-functions
no Mint 20 apenas para me familiarizar com o sistema de inicialização SystemV.
Há log_action_end_msg
uma função nele que tem este trecho de código,
TPUT=/usr/bin/tput
if log_use_fancy_output; then
RED=$( $TPUT setaf 1) #=> Step 1
NORMAL=$( $TPUT op) #
/bin/echo -e "${RED}failed${end}${NORMAL}" || true #=> Step 2
else
echo "failed${end}" || true
fi
quando a variável RED
recebe o valor de $( $TPUT setaf 1 )
, espero que RED receba uma string vazia, já que tput executado na linha de comando não imprime nada.
Mas, vejo que a variável é passada para echo, Step 2
implicando que ela tem algo armazenado nela. Como a variável RED
é definida, quando tput não imprime nada?
(Ou) Vamos deixar de lado todas as outras coisas. Pegue um terminal novo e execute RED=$( $TPUT setaf 1)
no meu terminal e espero que a cor da fonte do terminal seja definida como vermelho, mas não é assim. Só quando eu faço isso echo $RED
, ele fica vermelho.
Por que o comando tput não é executado durante a etapa de substituição, mas é executado quando você invoca o echo
.