Na interpretação deste fluxograma
Eu descobri que na festa do homem:
Quando o bash é chamado como um shell de login interativo ou como um shell não interativo com a opção --login, ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir.
Indica que os shells de logon interativo são lidos /etc/profile
(sem --noprofile)
Além disso, shells não interativos com a opção --login
read/etc/profile
Isso parece deixar alguns possíveis shells de login (nos quais $0
começa com a -
) que não são interativos (executam um script, talvez tão simples quanto date
) podem não ser lidos (fonte) /etc/profile
.
Para confirmar ou negar esta ideia:
Primeiro, tentei usar su -l -
, que inicia um shell de login com -
o caractere primeiro, mas não consigo torná-lo não interativo (e consigo apresentar os testes para sondá-lo).
Chamando algo como
$ bash -c 'date' -bash
Não relata ser um shell de logon (mesmo que o primeiro caractere seja a -
).
Tente isto para revelar os detalhes:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
O
$0
tem um-
como o primeiro caractere, não hái
(interativo) no valor de,$-
mas não é relatado como umlogin_shell
(o -u). Nesse caso, o / etc / profile não foi lido, mas não tenho certeza se este é o teste certo.
Há também a menção de "conchas de login não interativas raras" nesta resposta sem ser suficientemente específico para esta pergunta.
A conclusão desse cara é que /etc/profile
é sempre lida.
Leia a tabela de resumo: os shells de login interativos e não interativos são lidos /etc/profile
E, se os exemplos desta página estiverem corretos:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
O teste dos exec su - bob -c 'env'
relatórios que /etc/profile
foram lidos.
Em resumo:
É possível ter um shell de logon não interativo (não chamado com --login ou -l)?
E se for verdade, está lendo o /etc/profile
arquivo?
Se o exposto acima for verdade, temos que concluir que TODAS as conchas de login [interativas (ou não)] leem / etc / profile (sem --noprofile
opção).
Nota: para detectar que o / etc / profile está sendo lido, basta adicionar no início do arquivo este comando:
echo "'/etc/profile' is being read"
--login
opção Para o segundo, se euexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
obtiver (codificado em C qoutes)$'/etc/profile read\nshopt -s login_shell\nbash himBH'
, é um login, mas é interativo. Precisamos de login e não interativos . O que é que estou perdendo?