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 tty
pode 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/tty1
ou algo semelhante. Se um console serial for usado, você poderá ver /dev/ttyS0
outro dispositivo de porta serial. As únicas vezes em que você poderá ver um literal /dev/console
pode 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/securetty
existe 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 systemd
serviç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 systemd
recurso 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 | sort
nos dois ambientes. $DISPLAY
é um para verificar.
Além disso, leia man isatty
.