РЕДАКТИРОВАТЬ: Вот обновленная версия 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, затем сохранить и выйти ) и введите другую букву, чтобы подтвердить разрешение конфликта, а затем, наконец, отобразить следующий шаг обновления svn (другие файлы и т. д.)?
Другими словами, я хочу «приостановить» скрипт, отображающий цвета, чтобы пользователь мог взаимодействовать с svn, затем продолжите обновление svn.Я думаю, что в будущем будет очень полезно узнать, как можно позволить awk приостановить выполнение сценария вызывающего абонента, а затем возобновить его!