150 lines
3.0 KiB
Markdown
150 lines
3.0 KiB
Markdown
# mkshrc notes
|
|
|
|
Checked `mkshrc` with:
|
|
|
|
```sh
|
|
mksh -n mkshrc
|
|
```
|
|
|
|
Syntax check passes, but these issues/suspicious spots were found.
|
|
|
|
## Issues
|
|
|
|
1. **Mason PATH bug**
|
|
|
|
```sh
|
|
test -d $HOME/.local/share/nvim/mason/bin && export PATH=$HOME/.local/share/mason/bin:$PATH
|
|
```
|
|
|
|
The test checks `~/.local/share/nvim/mason/bin`, but the exported path is `~/.local/share/mason/bin`.
|
|
On this machine the checked directory exists and the exported directory does not.
|
|
|
|
Suggested fix:
|
|
|
|
```sh
|
|
test -d "$HOME/.local/share/nvim/mason/bin" && export PATH="$HOME/.local/share/nvim/mason/bin:$PATH"
|
|
```
|
|
|
|
2. **`stty` / `bind` emit errors without a tty**
|
|
|
|
Non-interactive sourcing produced errors like:
|
|
|
|
```text
|
|
stty: standard input: Not a tty
|
|
mksh: ./mkshrc[12]: bind: can't bind, not a tty
|
|
```
|
|
|
|
Suggested guard:
|
|
|
|
```sh
|
|
[[ -t 0 ]] && stty -ixon
|
|
[[ -o interactive ]] && {
|
|
bind '^l'=clear-screen
|
|
bind '^k'=kill-line
|
|
bind '^j'=kill-to-eol
|
|
bind '^e'=edit-line
|
|
}
|
|
```
|
|
|
|
3. **`HISTFILESIZE` and `HISTCONTROL` are bash-style**
|
|
|
|
```sh
|
|
export HISTFILESIZE=10000
|
|
export HISTCONTROL=ignoredups
|
|
```
|
|
|
|
These are likely ignored by mksh. mksh generally uses `HISTSIZE`/`HISTFILE`; `HISTCONTROL=ignoredups` is not a mksh feature.
|
|
|
|
4. **`LESSHISTFILE` is set multiple times**
|
|
|
|
```sh
|
|
export SHELL=$MKSH MANWIDTH=80 LESSHISTFILE=-
|
|
export LESSHISTFILE=$HOME/.cache/lesshist
|
|
export LESSHISTFILE="$XDG_STATE_HOME"/less/history
|
|
```
|
|
|
|
Final value wins. Also `~/.local/state/less` does not currently exist, so less may fail to write history unless created.
|
|
|
|
5. **`W3M_DIR` contains literal `~`**
|
|
|
|
```sh
|
|
export W3M_DIR="~/.cache/w3m"
|
|
```
|
|
|
|
Because `~` is quoted, it will not expand.
|
|
|
|
Suggested fix:
|
|
|
|
```sh
|
|
export W3M_DIR="$HOME/.cache/w3m"
|
|
```
|
|
|
|
6. **`dkr()` has a bug with multiple args**
|
|
|
|
```sh
|
|
[ -z "$@" ] && cmd="echo"
|
|
```
|
|
|
|
With multiple arguments this can error in mksh. Use:
|
|
|
|
```sh
|
|
(( $# == 0 )) && cmd="echo"
|
|
```
|
|
|
|
Also:
|
|
|
|
```sh
|
|
cmd="docker $@"
|
|
```
|
|
|
|
loses argument quoting and can behave badly with spaces/shell metacharacters.
|
|
|
|
7. **`loop()` should quote args**
|
|
|
|
Current:
|
|
|
|
```sh
|
|
loop() { while true ; do $@; sleep 1; done ;}
|
|
```
|
|
|
|
Safer:
|
|
|
|
```sh
|
|
loop() { while true; do "$@"; sleep 1; done; }
|
|
```
|
|
|
|
8. **ANSI gray fallback is probably wrong**
|
|
|
|
```sh
|
|
txtgry="$(tput setaf 8 2>/dev/null || echo '\e[0;38m')"
|
|
```
|
|
|
|
`38` normally expects extended color parameters. Better fallback:
|
|
|
|
```sh
|
|
echo '\e[0;90m'
|
|
```
|
|
|
|
9. **PATH grows on repeated sourcing**
|
|
|
|
Re-sourcing this file repeatedly prepends/appends duplicate PATH entries. Not fatal, but noticeable.
|
|
|
|
10. **Dangerous aliases**
|
|
|
|
These may be intentional, but are worth noting:
|
|
|
|
```sh
|
|
alias cp='cp -r'
|
|
alias rm='rm -r'
|
|
alias docker='doas docker'
|
|
```
|
|
|
|
`rm -r` by default can make accidents worse.
|
|
|
|
## Most important fixes
|
|
|
|
- Fix Mason path line.
|
|
- Fix `W3M_DIR`.
|
|
- Fix `dkr()` argument check/quoting.
|
|
- Guard `stty`/`bind` for non-tty/non-interactive use.
|