Comment définir les commands qui s'exécutent avant chaque invite?

Je le savais mais j'ai oublié: je veux exécuter une command ou quelques commands avant chaque invite. Quand je suis dans notre boîte PROD, je veux un gros gros callback au-dessus de chaque invite qui dit * VOUS ÊTES EN PROD * et peut-être une autre chose ou deux. Actuellement, je pense que c'est ainsi que le courrier est vérifié mais je ne peux pas me callbacker comment cette configuration est définie.

Utiliser ksh et Solaris 5.10

Une idée?

Merci

Si tout ce que vous voulez est un gros gros avertissement fixe, alors il suffit de l'append à l'invite:

 red=$(tput setaf 1; tput smso; tput bold) reset_color=$(tput sgr0) PS1=' ${red}[THIS IS A PRODUCTION SYSTEM!!]${reset_color} rest of the prompt$ ' 

Dans les implémentations modernes (post 1995) de ksh (ksh93, mksh), $PS1 est sujette à la substitution de commands et à l'expansion de parameters, vous pouvez donc faire des choses comme:

 function mywarning { tput setaf 1; tput bold date "+it's %T, please remember it's a production system" tput sgr0 } PS1='$(mywarning)# ' 

Dans ksh88 (ce qui est toujours le cas /usr/bin/ksh Solaris 10), seuls l'expansion des parameters et des tilde est effectuée dans l'invite.

Vous devez revenir à des astuces astucieuses pour n'importe quoi de fantaisie dans l'invite. Et puis, vous êtes assez limité dans ce que vous pouvez faire.

Bien que l'expansion arithmétique ne soit pas effectuée, vous pouvez développer des expressions arithmétiques (ici expr ) comme ${array[expr]} . Parce que les affectations (bien que seulement aux valeurs numériques) peuvent être faites dans les expressions arithmétiques, cela donne des occasions de faire des choses de fantaisie.

Vous pouvez l'utiliser pour post-traiter des variables dynamics comme $SECONDS , $PWD , $? , $! , $RANDOM , $_ .

Par exemple, vous pouvez get une date HH: MM: SS avec:

 typeset -Z2 _h _m _s eval "$(date +'SECONDS=$((%H*3600+%M*60+%S))')" PS1='${z[(_h=SECONDS/3600)+(_m=(SECONDS/60)%60)+(_s=SECONDS%60)]}${_h}:${_m}:${_s} $ ' 

Vous pouvez append votre avertissement gras toutes les 5 invites en faisant:

 set -A warn '' ' [THIS IS A PRODUCTION SYSTEM!!] ' '' '' '' PS1='${warn[warn_count=(warn_count+1)%5]}# ' 

Je ne pense pas que vous pouvez avoir une command exécutée avant chaque invite (le contrôle de courrier est fait en interne par ksh ), mais vous pouvez avoir une exécution après chaque command avec le piège DEBUG:

 trap 'my-command' DEBUG 

Notez que c'est fait après chaque command simple dans chaque sous-shell.

Par exemple, dans:

 for f in *; do :; done 

my-command sera exécuté autant de fois qu'il y a de files dans le directory courant.

Dans:

 : | : 

Il est exécuté 3 fois … Donc en effet, ce n'est pas vraiment pratique.

Je le mettrais simplement dans /etc/profile , ou /etc/issue . Parfois, l'affichage du contenu du file d'édition est désactivé, mais je pense toujours que c'est un bon callback.

Changer le contenu de la variable $PS1 est ok, je suppose, vous pouvez toujours imprimer quelques avertissements /etc/profile . Comme il s'agit d'un système de production, il est possible de modifier ces files, car ici, vous voulez des changements durables dans le système. (Normalement, je vous déconseille de modifier ces files et d'utiliser les files user à la place.)

Vous pouvez voir l'hôte, l'heure, les locations et la twig git avec:

 HOST='\033[02;36m\]\h'; HOST=' '$HOST TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`' BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH 

Vous pouvez modifier n'importe lequel d'entre eux, par exemple l'hôte.

Si vous voulez exécuter une command, utilisez backtics – these “ `