Este site diz-nos que existe um $ZDOTDIR
, o que torna possível uma solução muito feia:
-
/distdir/my-cmd
:Use maneiras específicas de shell para substituir os arquivos init ou falhar irremediavelmente.
case $(basename $SHELL) in zsh) OLD_ZDOTDIR="$ZDOTDIR" ZDOTDIR="/distdir" zsh -i ;; bash) bash --init-file "/distdir/.zshrc" -i ;; *) echo "Unrecognized shell $SHELL"; exit 1 ;; esac
-
/distdir/.zshrc
:Nomeado
.zshrc
, pois os nomes são codificados em zsh, mas o bash pode ser passado por um arquivo nomeado arbitrariamente via--init-file
. Também seria possível nomear isto, e.our_stuff.sh
e crie um.zshrc
que contenha apenas. ./our_stuff.sh
.Como, na verdade, não queremos substituir os arquivos init, mas para acrescentar outro, precisamos recriar meticulosamente a sequência incorporada de origem deles.
# ignore profile, login & logout rc files, as we want no login shells case $(basename $SHELL) in zsh) test -f "$OLD_ZDOTDIR/.zshenv" && . "$OLD_ZDOTDIR/.zshenv" test -f "$OLD_ZDOTDIR/.zshrc" && . "$OLD_ZDOTDIR/.zshrc" ;; bash) test -f ~/.bashrc && source ~/.bashrc test -f /etc/bash.bashrc && source /etc/bash.bashrc ;; esac do_our_stuff! PS1="myenv! $PS1" #tell the user he’s in a modified shell