Determine se o login atual é o primeiro do mês no Bash

0

Esta é uma continuação do meu post aqui

Embora o A.B. me forneceu a resposta correta, que é utilizando a saída de last e verificando se é o log atual, não resolveu meu problema. Eu verifiquei no login a saída de last e ele não tinha a linha de fundo para ser o primeiro login para o mês. Em vez disso, o primeiro login está no topo (acima dos logins de julho).

Não guardei a captura de tela, já que, a partir de agora, a saída de last foi apagada em julho. É como /var/log/wtmp não atualizar instantaneamente no login que eu esperava que fosse. Alguns comentários sugeridos na parte 1 do meu post dizem que ele é atualizado a cada primeiro dia do mês. De qualquer forma eu só quero executar algum script na inicialização que me diz se o meu login atual é o primeiro login para o mês.

Aqui está um script simples que escrevi:

firstLogin=$(last | tail -3 | head -1)

# check if "still logged in" (this is current log in)
if [[ $(grep "still" <<< $firstLogin) ]]; then
    notify-send "first login!!!!"
fi

Alguém pode sugerir um caminho para isso? Eu apreciaria qualquer ajuda.

EDITAR: Como você deve ter visto no script de exemplo, estou tentando fazer isso sem a ajuda de nenhum arquivo temporário. No entanto, se não há outra maneira de fazê-lo sem arquivos temporários, eu provavelmente iria com ele.

    
por krato 02.08.2015 / 14:48

1 resposta

2

Por que não simplificar a vida por si mesmo e anotar em um arquivo em cada login o atual mês e testar seu valor anterior?

Quando você faz login e seu shell é bash ele lerá os arquivos ~/.bash_profile , ~/.bash_login e ~/.profile .

Por exemplo, adicione a qualquer uma destas linhas:

now=$(date +%m)
last=$(<~/.mylastlogin)
if [ $now != "$last" ]
then notify-send "first login!!!!"
     echo $now >~/.mylastlogin
fi
unset now last

Para evitar o uso de um arquivo temporário, você pode usar qualquer arquivo existente, por exemplo, o arquivo ~ / .profile em si. Apenas touch a cada login depois comparando sua saída ls -l time. Por exemplo:

now=$(date +%m)
last=$(ls -ld --time-style=+%m ~/.profile | awk '{print $6}')
if [ $now != "$last" ]
then notify-send "first login!!!!"
     touch ~/.profile
fi
unset now last
    
por meuh 02.08.2015 / 16:18