I am looking for a way to customize Ash sessions with my own sets of alias
es and whatnots. What is the Ash equivalent of Bash's bashrc
files?
2 Answers
Ash first reads the following files (if they exist):
- System:
/etc/profile
- User:
~/.profile
-
9Provided that it is run as the login shell, which isn't the default (e.g. in Alpine Linux / Docker) Feb 1, 2017 at 10:29
-
2@JakubHolý did you find a way to run profile script for non-login shell? Nov 28, 2017 at 13:20
-
-
What do you mean by "first" reads these files? Will it do something else afterwards? Feb 16, 2020 at 2:47
A non-login shell will also read a file if specified in the environment variable ENV.
So if you set that somehow (Maybe in your ~/.profile, or some other 'overarching' environment control), then any future forked shells will run that script. Very handy for non-login cases.
Example: In your .profile, something like:
ENV=$HOME/.shinit; export ENV
. $ENV
Note that you should set ENV to a full explicit path, as the above will do. Don't use '~'.
It's hard to find explicit documentation on this for ash/dash, but it is confirmed to work on busybox-w32 (running on Windows). In fact it's hard to find good documentation on the featureset of ash at all.
UPDATE: There are a range of ash variants in the wild. 'ENV' may not work with all of them. There is some info on variants here: https://www.in-ulm.de/~mascheck/various/ash/
There is a suggestion in there that some ash variants may use 'SHINIT' in place of ENV.
-
1
-
2
-
1Has the ENV or SHINIT variable just to be set or to be set to a specific value? I am trying to force docker to read .profile in /root/.profile without explicitly starting with /bin/sh -l– LeonApr 17, 2019 at 21:12
-
@Leon - ENV (or maybe SHINIT) needs to contain the full path of the file to load/source. But this is only for startup of ‘ash’ shell variants - not the common sh or bash shells.– spechterApr 19, 2019 at 5:44
-