mensagem para o usuário após o primeiro login

5

Existe alguma maneira de exibir uma mensagem para o usuário logo após o primeiro login?

Eu quero mostrar a ele que "esta é a primeira vez que você está registrando com esta conta".

    
por Shahram Pezeshki 10.09.2015 / 16:19

1 resposta

13

Ao criar a conta, crie um arquivo chamado ~/.not_logged_in_yet . Não precisa ter nenhum conteúdo, o arquivo só precisa existir:

touch ~user/.not_logged_in_yet        # create the file
chown user ~user/.not_logged_in_yet   # should be owned by the user
chmod u+rw ~user/.not_logged_in_yet   # user must be able to delete it

Em seguida, crie um script chamado /etc/profile.d/check_first_login.sh que contenha

#!/bin/bash
# only do this for interactive shells
if [ "$-" != "${-#*i}" ]; then
    if [ -f "$HOME/.not_logged_in_yet" ]; then
        echo "Welcome, this is your first login"
        rm "$HOME/.not_logged_in_yet"
    fi
fi

Quando você logar com bash como seu shell, o shell irá procurar /etc/profile (veja Bash Startup Files no manual). /etc/profile origina todos os *.sh arquivos em /etc/profile.d/ , por isso, adicionar um arquivo a ele ficará visível para todos os usuários da sua máquina.

Você só deseja imprimir essa mensagem se a sessão for interactive . Imprimir qualquer coisa do seu perfil pode quebrar coisas supostamente não-interativas (como ssh-copy-id - embora eu não saiba se isso é especificamente quebrado). A variável bash $- contém algumas das configurações definidas com o comando set :

$ bash -c 'echo $-; set -ex; echo $-'
hBc
+ echo ehxBc
ehxBc

Esta forma de expansão de parâmetro ${-#*i} remove uma subseqüência principal terminando com um "i". $- conterá apenas um "i" se for uma sessão bash interativa, portanto "$-" não será igual a "${i#*i}" se a sessão for interativa. Existem outras maneiras de testar isso: consulte Esse shell é interativo? - Eu usei este método porque é isso que o / etc / profile faz.

    
por 10.09.2015 / 16:32