Если все, что Вы хотите, является большим фиксированным предупреждением, то просто добавляют его к подсказке:
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$ '
В современном (отправляют 1995), реализации ksh (ksh93, mksh), $PS1
подвергается замене команды и расширению параметра, таким образом, можно сделать вещи как:
function mywarning {
tput setaf 1; tput bold
date "+it's %T, please remember it's a production system"
tput sgr0
}
PS1='$(mywarning)# '
В ksh88 (который 10-е Соляриса /usr/bin/ksh
все еще), только параметр и расширение тильды сделаны в подсказке.
Необходимо вернуться к умным приемам для чего-либо, полагают в подсказке. И затем, Вы вполне ограничены в том, что можно сделать.
В то время как арифметическое расширение не выполняется, поскольку можно развернуть вещи как ${array[expr]}
, у Вас могут быть арифметические выражения (здесь expr
) оцененный. Поскольку присвоения (хотя только к численным значениям) могут быть сделаны в арифметических выражениях, который дает некоторые возможности сделать необычные вещи.
Можно использовать это для последующей обработки динамических переменных как $SECONDS
, $PWD
, $?
, $!
, $RANDOM
, $_
.
Например, можно получить дату HH:MM:SS с:
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} $ '
Можно добавить жир, предупреждающий каждые 5 подсказок путем выполнения:
set -A warn '' '
[THIS IS A PRODUCTION SYSTEM!!]
' '' '' ''
PS1='${warn[warn_count=(warn_count+1)%5]}# '
Я не думаю, что можно было выполнить команду перед каждой подсказкой (почтовая проверка сделана внутренне ksh
), но у Вас может быть тот, бежит за каждой командой с прерыванием ОТЛАДКИ:
trap 'my-command' DEBUG
Обратите внимание, что это сделано после каждой простой команды в каждой подоболочке.
Так, например, в:
for f in *; do :; done
my-command
будет выполняться так же много раз, как существуют файлы в текущем каталоге.
В:
: | :
Это выполняется 3 раза... Таким образом, в действительности это не действительно практично.
Это может быть подход:
diff <(nl file1) <(nl file2)
С помощью nl
номеров линий, которые diff
распознают линии построчно.
Адаптировано из ответа на объединение, это работает для меня в командной строке sort -n -k1,1 -s <(nl file1) <(nl file2)
. Полезно там, где не установлен meld.