Intenção
Estou no meio de escrever um pequeno script de shell (POSIX, exceto o system_beep()
).
O script, que roda no Cygwin, deve descobrir se o laptop da minha mãe está fechado ou não e me dá um resultado claro e se também abrir um sinal sonoro de 5x.
Código
#!/bin/bash
set -o nounset
blink=$(tput blink)
bold=$(tput bold)
reverse=$(tput rev)
no_color=$(tput sgr0)
red=$(tput setaf 1)
#blue=$(tput setaf 4)
#cyan=$(tput setaf 6)
green=$(tput setaf 2)
#white=$(tput setaf 7)
#yellow=$(tput setaf 3)
#magenta=$(tput setaf 5)
lid_open_color="${blink}${bold}${reverse}${red}"
lid_closed_color="${blink}${bold}${reverse}${green}"
system_beep()
{
echo -ne '$ ./lid-status-mama-beep
Some error occurred!
7'
}
beep_x_times()
{
i=1; while [ "$i" -le "$1" ]; do
i=$((i + 1))
system_beep
sleep 1s
done
}
get_lid_state_mom()
{
if ! ssh heruser@laptop_ip -p port_number -o ConnectTimeout=3 -i /home/myuser/.ssh/id_rsa 2> /dev/null \
cat /proc/acpi/button/lid/LID0/state | awk '{print $2}'; then
# if [ "$?" -ne 0 ]; then
echo "Error connecting to Mom via SSH"
exit 1
fi
}
state=$(get_lid_state_mom)
if [ "$state" = "closed" ]; then
echo "${lid_closed_color}closed${no_color}"
elif [ "$state" = "open" ]; then
echo "${lid_open_color}open${no_color}"
beep_x_times 5
else
echo "Some error occurred!"
fi
Problema
Apesar dos meus esforços, pareço incapaz de entender por que recebo:
$ ./lid-status-mama-beep
closed
Enquanto se comporta corretamente, quando o laptop é conectável via SSH:
Se a tampa estiver fechada:
$ ./lid-status-mama-beep
open
Se a tampa estiver aberta:
#!/bin/bash
set -o nounset
blink=$(tput blink)
bold=$(tput bold)
reverse=$(tput rev)
no_color=$(tput sgr0)
red=$(tput setaf 1)
#blue=$(tput setaf 4)
#cyan=$(tput setaf 6)
green=$(tput setaf 2)
#white=$(tput setaf 7)
#yellow=$(tput setaf 3)
#magenta=$(tput setaf 5)
lid_open_color="${blink}${bold}${reverse}${red}"
lid_closed_color="${blink}${bold}${reverse}${green}"
system_beep()
{
echo -ne '$ ./lid-status-mama-beep
Some error occurred!
7'
}
beep_x_times()
{
i=1; while [ "$i" -le "$1" ]; do
i=$((i + 1))
system_beep
sleep 1s
done
}
get_lid_state_mom()
{
if ! ssh heruser@laptop_ip -p port_number -o ConnectTimeout=3 -i /home/myuser/.ssh/id_rsa 2> /dev/null \
cat /proc/acpi/button/lid/LID0/state | awk '{print $2}'; then
# if [ "$?" -ne 0 ]; then
echo "Error connecting to Mom via SSH"
exit 1
fi
}
state=$(get_lid_state_mom)
if [ "$state" = "closed" ]; then
echo "${lid_closed_color}closed${no_color}"
elif [ "$state" = "open" ]; then
echo "${lid_open_color}open${no_color}"
beep_x_times 5
else
echo "Some error occurred!"
fi
Eu obviamente faço algo errado neste caso de tratamento de erros.
Pergunta
Como faço essa saída de script:
Error connecting to Mom via SSH
quando a conexão está desativada por alguma razão?