Сравните два файла строго линию за линией без вставок или удалений

Если все, что Вы хотите, является большим фиксированным предупреждением, то просто добавляют его к подсказке:

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 раза... Таким образом, в действительности это не действительно практично.

13
10.06.2014, 12:43
2 ответа

Это может быть подход:

diff <(nl file1) <(nl file2)

С помощью nl номеров линий, которые diff распознают линии построчно.

18
27.01.2020, 19:53

Адаптировано из ответа на объединение, это работает для меня в командной строке sort -n -k1,1 -s <(nl file1) <(nl file2). Полезно там, где не установлен meld.

0
19.11.2020, 19:04

Теги

Похожие вопросы