Você pode examinar a mensagem (stdout) produzida por systemctl
, bem como seu status de saída (o último por meio da variável $?
shell). A mensagem de erro que você procura evitar é entregue ao stderr, então você precisa redirecionar esse fluxo se quiser suprimi-lo. Status de saída diferente de zero pode indicar que o dispositivo não foi encontrado ou que foi desativado (consulte o manual para mais informações).
#!/bin/bash -l
service=$1
echo "Is $service enabled?"
msg=$(systemctl is-enabled "$service" 2>/dev/null) # capture message
res=$? # capture exit code
if [ -z "$msg" ]; then # message is empty if service not found
echo "$service not found"
else # service could be enabled, disabled, static, etc.
if [ "$res" -eq 0 ]; then # enabled
echo "Yes $service is enabled: $msg"
else
echo "No, $service is disabled"
fi
fi
Salvando esse script como tmp.sh, você pode testar com várias entradas:
$ ./tmp.sh autofs
Is autofs enabled?
Autofs not found
$ ./tmp.sh anacron.timer
Is anacron.timer enabled?
Yes anacron.timer is enabled: enabled
$ ./tmp.sh runlevel6.target
Is runlevel6.target enabled?
No, runlevel6.target is disabled
Devido à variedade de outros casos, talvez seja melhor usar uma instrução case
para um tratamento mais detalhado do status, por exemplo,
case "$msg" in
enabled*) echo "Yes $service is enabled" ;;
disabled) echo "No, $service is disabled" ;;
linked*) # etc..
;;
static*) # etc..
;;
esac