Um shell de login não interativo executa '~ / .profile' ou um arquivo cujo nome é '$ BASH_ENV'?

0

De Manual de bash

Invoked as an interactive login shell, or with --login

When Bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When an interactive login shell exits, or a non-interactive login shell executes the exit builtin command, Bash reads and executes commands from the file ~/.bash_logout, if it exists.

Invoked as an interactive non-login shell

...

Invoked non-interactively

When Bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

but the value of the PATH variable is not used to search for the filename.

As noted above, if a non-interactive shell is invoked with the --login option, Bash attempts to read and execute commands from the login shell startup files.

Em qual caso um shell de login não interativo pertence, o primeiro caso ou o terceiro caso?

O primeiro caso "Chamado como um shell de login interativo, ou com --login" contém o cenário de "shell não interativo com a opção --login", então deduzo que

  • o primeiro caso é para camadas de login, independentemente de serem interativas ou não interativas, e

  • o terceiro caso é para shells não-interativos não-interativos.

Estou correto?

Obrigado.

    
por Tim 05.04.2018 / 00:31

1 resposta

2

Não, você não está correto. O Bash se comporta conforme documentado:

  • a primeira seção se aplica a shells de login interativo e a shells não interativos iniciados com o --login flag;
  • a terceira seção se aplica a shells não interativos, incluindo shells de login não interativos não iniciados com o --login flag.

Um shell pode ser um shell de login sem o sinalizador --login . Se você olhar para /proc/$$/cmdline de um shell Bash iniciado por SSH em um sistema Linux, verá que ele foi iniciado como -bash - o hífen principal é a maneira usual de iniciar um shell de login e não é coberto por a primeira seção se acabar sendo não interativa. No entanto, se alguém quisesse um shell de login não interativo por qualquer motivo, normalmente usaria --login para obtê-lo.

    
por 05.04.2018 / 00:35