base-files: Add /etc/shinit for non-login shell init
authorJeffery To <jeffery.to@gmail.com>
Thu, 2 May 2019 18:24:27 +0000 (02:24 +0800)
committerPetr Štetiar <ynezz@true.cz>
Sun, 1 Mar 2020 20:35:59 +0000 (21:35 +0100)
commit12020f8a95d21547bd7d7fd1fef9cdecf2892803
treedb9a4a36e04807b0b24b542ea21b25725bd4bc82
parent2c3c83e40bf102ee25b352298d54fc0f86372e4f
base-files: Add /etc/shinit for non-login shell init

Because /etc/profile (and ~/.profile) are read by login shells only,
aliases and functions defined there are not available to non-login
shells, e.g. when using screen or tmux.

If the ENV environment variable exists (exported by /etc/profile or
~/.profile) and references an existing file, then all interactive shells
(login or non-login) will read that file as well.

This sets the ENV environment variable in /etc/profile, pointing to
/etc/shinit.

This also adds /etc/shinit, which:

* Contains alias and function definitions originally in /etc/profile

* Sources /etc/mkshrc if the user is using mksh (also originally in
  /etc/profile), as /etc/mkshrc is meant for all interactive shells

* Sources ~/.mkshrc if the user is using mksh, to compensate for the
  fact that mksh will not read ~/.mkshrc if ENV is set

* Sources ~/.shinit if the user is not using mksh

This also removes the shebang from /etc/profile, as the file is sourced,
not executed.

Signed-off-by: Jeffery To <jeffery.to@gmail.com>
package/base-files/Makefile
package/base-files/files/etc/profile
package/base-files/files/etc/shinit [new file with mode: 0644]
package/base-files/files/lib/upgrade/keep.d/base-files-essential