Bourne shell:它在交互式、非登录时执行什么?

Bourne shell:它在交互式、非登录时执行什么?

我这样问是因为根据https://unix.stackexchange.com/a/46856/84749,当我开始时,screen我正在做的是“交互式、非登录”。实际发生的情况是我正在登录 Bourne shell(不是 BASH)系统,当我登录时,它运行得~/.profile很好,并设置了我的别名。但是,当我运行时,screen这些别名会丢失,并且它似乎无法运行~/.profile~/.login我尝试过的任何其他操作。

我在 Raspberry Pi 3 上运行 LibreELEC。

答案1

登录sh会话在调用时读取用户的登录会话~/.profile。如果ENV执行此操作后将变量设置为文件名,并且该文件存在,则 shell 将使用该文件来进一步初始化登录会话。

非登录 shell 的交互式 shell 将仅使用$ENVifENV设置,但不会读取~/.profile.

非交互式 shell 不应使用这两个文件中的任何一个。

通常,一个ENV在一个的末尾导出~/.profile

ENV="$HOME/.shrc"     # for example
export ENV            # may be done as export ENV="..." too, in most shells.

例如,bash如果它被作为sh或 with调用,会发生什么bash --posix

人们可以根据需要使用这两个文件(~/.profile$ENV),但是配置文件是您可能想要设置和导出只需要设置一次(PATH等等)的环境变量的地方,启动fetchmail您需要的任何进程或其他用户守护程序。希望使用等,而该$ENV文件是您为该特定 shell 会话/TTY 设置特定内容的位置,例如设置GPG_TTY(如果您使用的是 GnuPG)、设置别名(因为别名不被子 shell 继承)等。

shell默认ksh93使用~/.profileand $ENV,但$ENV以特定方式解释。如果 $ENV/./或开头././,则不会使用系统范围的配置文件(例如/etc/ksh.kshrc)。

该文件~/.login不被 所使用sh,除非ENV被设置为此文件名或者它明确源自~/.profile$ENV

相关内容