La méthode la plus simple pour émuler $PROMPT_COMMAND
de bash qui me vient à l'esprit est d'utiliser le crochet precmd
, comme vous l'avez déjà compris. Définissez-le comme suit :
precmd() { eval "$PROMPT_COMMAND" }
et vous pouvez faire quelque chose comme ça :
$ PROMPT_COMMAND='echo Bonjour, il est actuellement $(date)'
Bonjour, il est maintenant Lun, Mar 31, 2014 7:08:00 PM
$ whoami
utilisateur
Bonjour, il est maintenant Lun, Mar 31, 2014 7:08:21 PM
$
Veuillez noter les simples guillemets dans cet exemple, sinon $(date)
sera étendu trop tôt, c'est-à-dire déjà lors de la définition de $PROMPT_COMMAND
et non lors de l'appel avant l'invite.
Si vous souhaitez préserver (et ne pas modifier) la définition existante, vous pouvez utiliser cette approche :
$ prmptcmd() { eval "$PROMPT_COMMAND" }
$ precmd_functions=(prmptcmd)
Ainsi, la fonction prmptcmd
est exécutée après la fonction precmd()
existante.
Enfin, voici une manière adaptée à une utilisation dans un package logiciel, qui ne devrait ni modifier les fichiers utilisateur ou système, ni entrer les commandes de manière interactive.
Un exemple pour démarrer une session bash pourrait être :
PROMPT_COMMAND="echo foo" bash
Pour démarrer zsh, vous pouvez utiliser :
ZDOTDIR=/répertoire/du/programme zsh
ce qui provoque la lecture de /répertoire/du/programme/.zshrc
. Dans ce fichier, le crochet precmd()
peut être défini comme expliqué ci-dessus. Si vous voulez inclure les paramètres de l'utilisateur en plus, incluez également source $HOME/.zshrc
, etc. dans le .zshrc du programme. Cette configuration est maintenable, car aucun fichier en dehors du répertoire du programme n'est modifié.
En guise de dernière addition, voici une preuve de concept sur la façon de conserver le message de bienvenue newuser. Utilisez le code suivant dans votre fichier de configuration rc /répertoire/du/programme/.zshenv
:
echo définir precmd, traps, etc.
autoload -Uz zsh-newuser-install
if [[ ! -e "$HOME/.zshrc" ]]; then
zsh-newuser-install -f
mv $ZDOTDIR/.zshrc $HOME/.zshrc
else
builtin source $HOME/.zshrc
fi