func overrideCd() string {
	return `
function cd { if (( $# == 0 )); then builtin cd $W; else builtin cd $*; fi }
`
}
Create the declaration for a `cd` function that returns to the Wash root when no arguments are
supplied.
package shell
import (
	"os"
	"os/exec"
	"path/filepath"
)
type Shell interface {
	Command(subcommands []string, rundir string) (*exec.Cmd, error)
}
func Get() Shell {
	switch sh := os.Getenv("SHELL"); filepath.Base(sh) {
	case "bash":
		return bash{sh: sh}
	case "zsh":
		return zsh{sh: sh}
	default:
		if sh == "" {
			sh = "/bin/sh"
		}
		return basic{sh: sh}
	}
}
func preparePrompt(cyan, green, reset, assign string) string {
	return `
function prompter() {
	local prompt_path=$PWD
	if [ -v W ]; then
		# If the current directory is W, replace with '.'. Else if it's a subdir, show just subpath.
		if [ "${prompt_path}" = "${W}" ]; then
			prompt_path=.
		else
			prompt_path=${prompt_path/#$W\//}
		fi
	fi
	if [ -v HOME ]; then
		# If prompt_path is still an absolute path (because it hasn't been changed) and is a subdir
		# of HOME, replace HOME with '~'.
		prompt_path=${prompt_path/#$HOME/\~}
	fi
	` + assign + `="` + cyan + `wash ${prompt_path}` + green + ` ❯` + reset + ` "
}
`
}