----------------------------------------
busybox ash "iSn’t vErY CuStOmIzAbLe"
September 14th, 2022
----------------------------------------

I use Alpine Linux, the default shell there is busybox ash, it's great.
The only issues I see with it are the severe lack of documentation (the

=> best way to figure things out are to read the source or just see if

whatever feature it is you are trying to use {likely from bash} actually
works) and lack of the command completion from bash (which I don't use).

=> Recently while browsing reddit, a user on the Alpine Linux sub was

asking if it is possible to make ash look a little prettier (it is), and
the replies were either encouraging the OP to try another shell, or the
hilarious repies of:
"ash isn’t meant to be customizable. Look at the man page for options."
"Ash still isn’t very customizable."
"Ash still isn’t very customizable."

=> suspected image of spicyboi404

My head really hurts, the stupid is just intolerable.

----------------------------------------

Since busybox ash is (as mentioned) severely lacking in documentation
I thought I'd post a few things that I know about customizing it off the
top of my head, these are specific to the Alpine Linux version of it, as
most others are going to have a vastly different build configuration:

busybox ash expand prompt strings:
\a     bell character (07), typically sounds the terminal bell/buzzer
\e     escape character (33), used for terminal functions such as ANSI
       colors, bold, italics, underline, et al
\h     short hostname
\H     long hostname (FQDN), if known, otherwise same as \h
\n     linefeed (newline)
\r     carriage return (needed for some unusual terminals (\r\n)
\t     current time in HH:MM format
\T     same as \t
\@     same as \t
\A     same as \t
\u     user who is running the shell
\w     Current working directory, $HOME abbreviated to ~
\W     basename of current working directory, $HOME abbreviated to ~
\nnn   replace `nnn' with the octal number of a character you wish to
       print for example `\007' is the same as `\a'
\[     Start a sequence of non-printable characters. Used for terminal
       control stuff mostly;
\]     End a sequence of non-printable characters


busybox ash environmental variables
$PS1           main prompt string
$PS2           continuation prompt string
$PS4           prefix for xtrace shell option output
$TMOUT         Enable bash-like auto-logout after $TMOUT seconds of
               idle time.
$MAIL          Mail file, ash will print "you have mail" if the file
               changes.
$MAILPATH      Mail directory, ash will print "you have mail" if
               changes are seen.
$RANDOM        Each read of "$RANDOM" will generate a new pseudorandom
               value. You can reset the generator by using a specified
               start value. After "unset RANDOM" the generator will
               switch off and this variable will no longer have special
               treatment.
$LANG          language, also used for unicode stuff (C.UTF-8 anyone?)
$LC_ALL        language, also used for unicode stuff
$LC_CTYPE      language, also used for unicode stuff


shell options, use the set command to set these. (e.g. `set -o noglob')
"e"   "errexit"        Exit immediately upon error (useful for scripts)
"f"   "noglob"         Disable filename globbing (cat *.html will no
                       longer work)
"I"   "ignoreeof"      Disables exiting on EOF (CTRL+D no longer exits)
"i"   "interactive"    Marks the shell as human interactive
"m"   "monitor"        Enables job control (on by default for
                       interactive shells)
"n"   "noexec"         Doesn't execute commands, but still parses input
                       very useful for shell scripting or pranks.
"x"   "xtrace"         before executing a command, print the actual
                       command that will be executed. Useful for
                       dealing with aliases & functions
"v"   "verbose"        prints shell input
"C"   "noclobber"      Output redirection (>) will only be allowed to
                       write new files, existing files will not be
                       modified.
"a"   "allexport"      Variables and functions which are set while this
                       option is in effect will be exported to
                       subshells etc.
"u"   "nounset"        Attempts to use unset variables and parameters
                       will print an error. Non-interactive shells will
                       exit also. Useful for scripting.
      "vi"             use vi-style line editing interface.
      "pipefail"       Cloned from bash: "If set, the return value of
                       a pipeline is the value of the last (rightmost)
                       command to exit with a non-zero status, or zero
                       if all commands in the pipeline exit
                       successfully. Disabled by default."

make ash look a little prettier:
PS1="\e[1;31ma\e[1;33ml\e[1;32mp\e[1;34mi\e[1;36mn\e[1;35me\e[0m
\033[30;37;5m😊\e[0m\w "


Did I miss anything? Do you have a prettier prompt for busybox ash?
Let us know in the comments below. (or on the reddit thread, why not?)
----------------------------------------

=> Back to phlog index | gopher.zcrayfish.soy gopher root

1515 folks think that spicyboi404 is a dumbass.
Future direct comment submission has been disabled for this phlog entry.
Comments are still accepted by email, please send to:
zacharygopher@gopher.zcrayfish.soy
Be sure to include the post title in the subject line! Thanks!
Nobody has commented on this post.
Proxy Information
Original URL
gemini://gopher.zcrayfish.soy/1/phlog/20220914-busybox-ash-isn-t-very-customizable
Status Code
Success (20)
Meta
text/gemini;
Capsule Response Time
579.518322 milliseconds
Gemini-to-HTML Time
0.954105 milliseconds

This content has been proxied by September (ba2dc).