我这样问是因为根据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 将仅使用$ENV
ifENV
设置,但不会读取~/.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
使用~/.profile
and $ENV
,但$ENV
以特定方式解释。如果 $ENV
以/./
或开头././
,则不会使用系统范围的配置文件(例如/etc/ksh.kshrc
)。
该文件~/.login
不被 所使用sh
,除非ENV
被设置为此文件名或者它明确源自~/.profile
或$ENV
。