Como determinar se o script bash é executado no 'console' e não na sessão de terminal remoto?

Como determinar se o script bash é executado no 'console' e não na sessão de terminal remoto?

Como determinar se o script bash é executado no 'console' e não na sessão de terminal remoto? Eu acho que existe alguma maneira de determinar se o script está sendo executado em/dev/console? Ou estou latindo para a árvore (binária) errada?

Responder1

Isso soa como um possívelProblema XY.

Um comando antigo do Unix ttypode informar em qual dispositivo seu terminal está. Então, algo assim pode fazer o que você está pedindo:

if [ $(tty) = "/dev/console" ]; then
    echo "Yes, I am on the console."
else
    echo "No, I am not on the console."
fi

No entanto,um programa em execução em uma sessão de login em um console virtual Linux pode ver /dev/tty1ou algo semelhante. Se um console serial for usado, você poderá ver /dev/ttyS0outro dispositivo de porta serial. As únicas vezes em que você poderá ver um literal /dev/consolepode ser durante a execução no shell de emergência/modo de usuário único. Saber quais dispositivos podem ser consoles válidos não é trivial; isso é parte da razão pela qual /etc/securettyexiste e é configurável pelo administrador do sistema.

(Se você optar por rejeitar as portas seriais, um administrador do sistema em algum lugar tentando usar uma conexão serial sobre LAN para corrigir um problemamuitosistema remoto pode odiar você.)

Se um processo ou script for executado como um systemdserviço, ele poderá não ter nenhum TTY no sentido tradicional; em vez disso, sua saída padrão e erro padrão serão conectados ao systemdrecurso de registro em diário do , que pode ou não passá-lo para o console no momento da inicialização, dependendo de como o serviço está configurado.

Por favor, edite sua pergunta para especificarpor quevocê quer saber se está no 'console' ou não, para que possamos tentar encontrar uma maneira de obter a resposta à sua pergunta de uma forma que seja apropriada à sua necessidade real.

Responder2

Se você executar ps axu, procure na coluna TTY o "console" raiz que o processo usa.

Todo processo tem um pai trabalhando até o processo root init

Responder3

Explore, com diff, os resultados env | sortnos dois ambientes. $DISPLAYé um para verificar.

Além disso, leia man isatty.

informação relacionada