---------------------------------------- | |
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 | |
1829 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: | |
[email protected] | |
Be sure to include the post title in the subject line! Thanks! | |
Nobody has commented on this post. |