Já faz muito tempo, então estou enferrujado com meus comandos.
Eu uso um script para ter lembretes. Um que estou executando exibirá "A chuva de meteoros ocorre depois da meia-noite". depois de 3 horas.
Existe uma maneira de evitar que eu feche acidentalmente um terminal que esteja com meu script de timer em execução?
Atualizar:
Aqui está meu roteiro.
#!/bin/bash
#
# Sound alarm after specifying time and message
# Must input time delay AND message in double quotes !!
#
#
# ** sleep can also accept intergers ex. sleep 7.63
# Made alias for it type al
# Print a trace of simple commands, for commands, case commands, select commands,
# and arithmetic for commands and their # arguments or associated word lists after they are expanded
# and before they are executed. The value of the PS4 variable is # expanded and the resultant value is printed before the # command and its expanded arguments.
Red='\e[0;31m'
BRed='\e[1;31m'
BIRed='\e[1;91m' # ${BIRed} this works
Gre='\e[0;32m'
BGre='\e[1;32m'
BBlu='\e[1;34m' # ${BBlu}
BWhi='\e[1;37m'
Black='\e[0;30'
BWhite='\e[0m 1;37'
# This defines a variable containing the ANSI escape sequence to clear
# the effect of all previous ANSI escape sequences that define formatting (colors, underlining, etc).
RCol='\e[0m';
soundfile="/usr/share/sounds/My_Sounds/Alarm_Clock_Sound.mp3"
clear
amixer -D pulse sset Master 40% > /dev/null 2>&1
if [ -f "$soundfile" ];
then
echo -e "${BGre}Soundfile is present."
else
echo "File $soundfile does NOT exist."
echo
echo "Program will now exit."
exit
fi
[ -z "$2" ] && {
echo
echo -e " ${BIRed}Error!! No time value given and/or message specified !!"
echo
echo -e " ${BBlu}Alarm Program 2018 ${RCol}"
echo
echo -e " alarm.sh [time value in seconds] Message in double Quotes";
echo -e " alarm 5m = 5 minute alarm"
echo -e " alarm 5h = 5 hour alarm"
echo -e " alarm 5d = 5 day alarm"
echo -e " alarm 1.5m = 1 minute 30 seconds alarm"
echo
echo -e " alarm.sh 1m "\"Take bread out of oven."\""
echo
exit 1; }
echo -e "\033[32;5mTIMER COUNTING DOWN to $1 \033[0m"
sleep $1
{
for ((volume = 15; volume <= 35; volume += 2)); do
# 2> /dev/null suppresses messages for amixer AND (c)vlc
amixer -D pulse sset Master ${volume}% > /dev/null
sleep .5
done
} &
mpg123 $soundfile > /dev/null 2>&1
#set back to original volume
amixer -D pulse sset Master %30
gxmessage -fg blue -font 'sans 20' -timeout 2 ' Tea is ready. !!'
Você pode executar seu script como um daemon usando o
daemon
comando, que executa o script em segundo plano:Para parar o daemon:
Para instalar o daemon:
A única outra coisa que você precisará fazer é modificar seu script para enviar suas mensagens via
notify-send
(conforme mencionado na sua pergunta):notify-send -u critical -t 0 "Meteor shower occurs after midnight."
Ao usar
-u critical -t 0
as opções, a notificação permanecerá na tela até você clicar nela.Alternativamente, você pode usar
nohup
:nohup ./yourscript &
Você ainda precisará modificar seu script para enviar suas mensagens
notify-send
conforme descrito acima.Dependendo de como você exibiria o texto, isso pode ou não funcionar para você. De forma mais geral, porém, esta é uma maneira válida de manter algo funcionando.
Você pode usar tmux . Você precisará instalá-lo com
sudo apt update && sudo apt install tmux
.Uma vez instalado, você pode iniciar uma sessão tmux executando
tmux
em um shell. Uma vez na sessão, você pode executar comandos e então fazer Ctrl+ Bseguido de Dpara ocultar a sessão. Mas, uma vez oculto, mesmo fechando o terminal, você pode voltar à sua sessão executando atmux a
partir de um shell. Você pode executarexit
na sessão do tmux para, bem, sair dela.Na verdade , isso não impede que ele seja fechado. Porém, ele o mantém funcionando mesmo se você fechar a janela do terminal, o que pode ser suficiente para o seu caso de uso.