SVN: Добавить цвета в svn командной строки с помощью awk (в bash)

РЕДАКТИРОВАТЬ: Вот обновленная версия 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 command displayed in colors

И снова, это именно то, что я хочу . Проблема возникает, когда обнаруживается конфликт (например, когда я делаю обновление): действительно, когда файл конфликтует, 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 приостановить выполнение сценария вызывающего абонента, а затем возобновить его!

7
задан Cœur 1 December 2018 в 14:30
поделиться