Um shell de login não interativo é incomum, mas é possível. Se você iniciar o shell com o argumento zeroth (que normalmente é o nome do executável) definido como uma string começando com -
, é um shell de login, seja ele interativo ou não.
$ ln -s /bin/bash ./-bash
$ echo 'shopt -p login_shell; echo $-' | HOME=/none PATH=.:$PATH -bash
shopt -s login_shell
hB
Sua tentativa bash -c date -bash
não funcionou porque isso não diz ao shell para ser um shell de login: o argumento zeroth é bash
, não -bash
. Após o bash ter iniciado, ele define a variável $0
to -bash
em vez do argumento zeroth, mas o argumento zeroth é o que importa.
Você pode executar um shell de login não interativo com su -l
ou su -
, mas precisa providenciar que a entrada padrão não seja um terminal e ainda possa ser autorizado (sem precisar digitar uma senha ou organizar sua senha para estar no início da entrada). Pode ser mais fácil com o sudo: execute sudo true
para obter uma credencial de presença e, em seguida, enquanto a credencial ainda estiver válida, execute echo 'shopt -p login_shell; echo $-' | sudo -i
.
Veja também Diferença entre o Shell de Login e o Shell de Não Login