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?
3 Answers
Ash first reads the following files (if they exist):
- System:
/etc/profile
- User:
~/.profile
-
12Provided 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
-
3@JakubHolý did you find a way to run profile script for non-login shell? Nov 28, 2017 at 13:20
-
1
-
What do you mean by "first" reads these files? Will it do something else afterwards? Feb 16, 2020 at 2:47
-
1
A non-login 'ash' or 'dash'-based shell may also 'source' a file if that file's full path is contained in the environment variable ENV (or perhaps SHINIT).
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/.ashrc; export ENV
. $ENV
Or if you like being explicit:
ENV=/home/kwest/.ashrc; export ENV
# File in 'ENV' will be sourced for future shells. Also source it for this login shell:
. $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.
-
3
-
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
-
Some year after the question on alipline 3.17 I figured out a solution (may not be the best, any comment welcome).
- Edit as root
/etc/profile
to add at the end just before theunset script
this line:. $HOME/.profile
- Then create a
.profile
in your home dir as described before like this:ENV=$HOME/.ashrc; export ENV . $ENV
Then you can create a .ashrc
in your home dir to set you aliases or other stuff.