I am looking for a way to customize Ash sessions with my own sets of aliases and whatnots. What is the Ash equivalent of Bash's bashrc files?


Ash first reads the following files (if they exist):

  • System: /etc/profile
  • User: ~/.profile
  • 9
    Provided that it is run as the login shell, which isn't the default (e.g. in Alpine Linux / Docker) Feb 1 '17 at 10:29
  • 2
    @JakubHolý did you find a way to run profile script for non-login shell? Nov 28 '17 at 13:20
  • @DavidLukac - See my other Answer here for non-login shells.
    – spechter
    Jan 22 '18 at 0:21
  • What do you mean by "first" reads these files? Will it do something else afterwards? Feb 16 '20 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
    Not working for me under Alpine 3.7.
    – knite
    Jun 14 '18 at 22:50
  • 2
    @knite Busybox's Ash (used by Alpine) uses ENV. Nov 26 '18 at 0:34
  • 1
    Has 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
    – Leon
    Apr 17 '19 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.
    – spechter
    Apr 19 '19 at 5:44
  • Can you provide an example of what should be set in ENV? Jul 5 '21 at 12:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.