O único verdadeiro equívoco que você parece ter é sobre o que constitui um shell de login não interativo.
Resumidamente (veja aqui para mais detalhes), com exemplos:
-
shell de login interativo: você faz login em um computador remoto por meio de, por exemplo,
ssh. Alternativamente, você coloca um tty em sua máquina local ( Ctrl + Alt + F1 ) e efetua login lá. -
shell interativo de não-login: abra um novo terminal.
-
shell não-interativo não interativo: execute um script. Todos os scripts são executados em seu próprio subshell e esse shell não é interativo. Ele só abre para executar o script e fecha imediatamente quando o script é concluído.
-
shell de login não interativo: isso é extremamente raro, e você não consegue encontrá-lo. Uma maneira de iniciar um é
echo command | ssh server. Quandosshé iniciado sem um comando (portanto,sshem vez dessh command, que executarácommandno shell remoto), ele inicia um shell de login. Se ostdindosshnão for um tty, ele iniciará um shell não interativo. É por isso queecho command | ssh serverlançará um shell de login não interativo. Você também pode iniciar um combash -l -c command.
Se você quiser brincar com isso, você pode testar os vários tipos de shell da seguinte forma:
-
Este shell é interativo?
Verifique o conteúdo da variável
$-. Para shells interativos, incluirái:## Normal shell, just running a command in a terminal: interacive $ echo $- himBHs ## Non interactive shell $ bash -c 'echo $-' hBc -
Este é um shell de login?
Há não maneira portátil de verificar isso, mas, para o bash, você pode verificar se a opção
login_shellestá definida:## Normal shell, just running a command in a terminal: interacive $ shopt login_shell login_shell off ## Login shell; $ ssh localhost $ shopt login_shell login_shell on
Colocando tudo isso junto, aqui está um de cada tipo possível de shell:
## Interactive, non-login shell. Regular terminal
$ echo $-; shopt login_shell
himBHs
login_shell off
## Interactive login shell
$ bash -l
$ echo $-; shopt login_shell
himBHs
login_shell on
## Non-interactive, non-login shell
$ ssh localhost 'echo $-; shopt login_shell'
hBc
login_shell off
## Non-interactive login shell
$ echo 'echo $-; shopt login_shell' | ssh localhost
Pseudo-terminal will not be allocated because stdin is not a terminal.
hBs
login_shell on