40

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?

2 Answers 2

39

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

  • System: /etc/profile
  • User: ~/.profile
4
  • 9
    Provided 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
  • @DavidLukac - See my other Answer here for non-login shells.
    – spechter
    Jan 22, 2018 at 0:21
  • What do you mean by "first" reads these files? Will it do something else afterwards? Feb 16, 2020 at 2:47
10

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.

6
  • 1
    Not working for me under Alpine 3.7.
    – knite
    Jun 14, 2018 at 22:50
  • 2
    @knite Busybox's Ash (used by Alpine) uses ENV. Nov 26, 2018 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, 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.
    – spechter
    Apr 19, 2019 at 5:44
  • Can you provide an example of what should be set in ENV? Jul 5, 2021 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.