РЕДАКТИРОВАНИЕ: Вот обновленная версия Github этого фрагмента, стабильная.
Вот часть кода Bash (я поместил его в .bashrc файл), который работает :
function svn {
command svn "$@" | awk '
BEGIN {
cpt_c=0;
}
{
if ($1=="C") {
cpt_c=cpt_c+1;
print "\033[31m" $0 "\033[00m"; # Conflicts are displayed in red
}
else if ($1=="A") {
print "\033[32m" $0 "\033[00m"; # Add in green
}
else if ($1=="?") {
print "\033[36m" $0 "\033[00m"; # New in cyan
}
else if ($1=="D") {
print "\033[35m" $0 "\033[00m"; # Delete in magenta
}
else {
print $0; # No color, just print the line
}
}
END {
print cpt_c, " conflicts are found.";
}';
}
Эта часть кода делает именно то, что я хочу. Функции SVN (статус, обновления и т. д.) печатаются с цветами. Для внутренних нужд я не хочу устанавливать такие вещи, как colorsvn или svn-color .
Вот пример кода выше: (не имеет достаточной репутации для публикации изображений)
И снова, , это именно то, что я хочу . Проблема возникает, когда обнаружен конфликт (например, когда я делаю обновление): действительно, когда файл конфликтует, svn передается пользователю, чтобы он мог напечатать несколько букв (см. Ниже)
# svn update
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
Есть ли способ awk, чтобы позволить пользователю что-то набрать (, например, e, открыв в VIm конфликтующий файл ), сделать что-то (, например, удалить несколько строк после типа e, затем сохраните & quit ) и введите другую букву для подтверждения разрешения конфликта, затем, наконец, отобразите следующий шаг обновления svn (другие файлы и т. д.)?
Другими словами, я хочу «приостановить» сценарий, который отображает цвета, чтобы позволить пользователю взаимодействовать с svn, а затем продолжить обновление svn. Я думаю, что в будущем будет очень полезно узнать, как можно позволить awk приостановить выполнение сценария вызова, а затем возобновить!