Se tudo o que você quer é um aviso fixo grande e gordo, basta adicioná-lo ao prompt:
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$ '
Em implementações modernas (pós-1995) de ksh (ksh93, mksh), $PS1
está sujeito a substituição de comandos e expansão de parâmetros, assim você pode fazer coisas como:
function mywarning {
tput setaf 1; tput bold
date "+it's %T, please remember it's a production system"
tput sgr0
}
PS1='$(mywarning)# '
Em ksh88 (que o /usr/bin/ksh
do Solaris 10 ainda é), apenas o parâmetro e a expansão do til são feitos no prompt.
Você tem que reverter para truques inteligentes para qualquer coisa chique no prompt. E então, você é bastante limitado no que você pode fazer.
Enquanto a expansão aritmética não é executada, como você pode expandir coisas como ${array[expr]}
, você pode ter expressões aritméticas (aqui expr
) avaliadas. Como atribuições (embora apenas a valores numéricos) podem ser feitas em expressões aritméticas, isso dá algumas oportunidades para fazer coisas extravagantes.
Você pode usar isso para pós-processar variáveis dinâmicas como $SECONDS
, $PWD
, $?
, $!
, $RANDOM
, $_
.
Por exemplo, você pode obter uma data de HH: MM: SS com:
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} $ '
Você pode adicionar seu aviso de gordura a cada 5 prompts fazendo:
set -A warn '' '
[THIS IS A PRODUCTION SYSTEM!!]
' '' '' ''
PS1='${warn[warn_count=(warn_count+1)%5]}# '
Eu não acho que você pode ter um comando executado antes de cada prompt (a verificação de e-mail é feita internamente por ksh
), mas você pode ter uma execução após cada comando com a interceptação DEBUG:
trap 'my-command' DEBUG
Observe que isso é feito após cada comando simples em cada subshell.
Então, por exemplo, em:
for f in *; do :; done
my-command
será executado quantas vezes houver arquivos no diretório atual.
Em:
: | :
É executado 3 vezes ... Então, na verdade, não é realmente prático.