i Szczęśliwego Nowego Roku. Oto trudny problem do odzyskania po świątecznym obiedzie!SVN: Dodaj kolory do linii komend svn z awk (w bash)
Oto część kodu bash (I umieścić go w .bashrc pliku) wich pracuje:
function svn {
command svn "[email protected]" | 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.";
}';
}
Ta część kodu zrobić dokładnie to, co chcę. Funkcje svn (status, aktualizacja itp.) są drukowane kolorami. W przypadku potrzeb wewnętrznych nie chcę instalować takich rzeczy, jak colorsvn lub svn-color.
Oto przykład kodu powyżej: (nie mają wystarczających reputację do zamieszczania zdjęć)
i znowu, że doskonale to, co chcę. Problem pojawia się, gdy zostanie wykryty konflikt (na przykład, gdy wykonuję aktualizację): w rzeczywistości, gdy plik jest sprzeczny, svn jest przekazywane użytkownikowi, aby mógł wpisać kilka liter (patrz poniżej):
# 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:
Czy istnieje sposób, aby awk niech typu użytkownika coś (na przykład e, wich otwarte w vim plik skonfliktowany), zrobić coś (na przykład usunąć niektóre wiersze po tYP e, a następnie zapisać & rzucić) i wpisz inną literę, aby potwierdzić rozwiązanie konfliktu, a następnie wyświetlić następny etap aktualizacji svn (inne pliki itp.)?
Innymi słowy, chcę "wstrzymać" skrypt, który wyświetla kolory, aby umożliwić interakcję użytkownika z svn, a następnie aktualizacja svn. Myślę, że będzie bardzo przydatna na przyszłość, aby wiedzieć, jak można pozwolić awk zatrzymać skrypt wywołujący, a następnie wznowić!
Czy dałam sobie jasno do zrozumienia? Mój angielski nie jest tak dobry, jak chcę:/
Jeśli potrzebujesz szczegółowych informacji, zapytaj!
Twój 'command svn' nadal otrzymuje dane wejściowe. Istnieją narzędzia, takie jak "spodziewać się" przełączania między wykonywaniem autonomicznym i interaktywnym, ale może to być nieco poza punktem. Prawidłowym rozwiązaniem jest opakowanie na niższym poziomie, tak jak te, o których mówiłeś, że nie chcesz ich używać. Twój skrypt awk otrzymuje swój input frim a pipe, ale możesz zhackować coś, aby dodać tryb, w którym odczytuje dodatkowe wejście z '/ dev/tty' lub niektóre takie. – tripleee
Czy chcesz rozszerzyć swoją funkcję bash 'svn', aby obsłużyć to wszystko, czy też wyobrażasz sobie, że wymagane" wstrzymanie "jako oddzielny kod po uruchomieniu funkcji' svn'? Nawiasem mówiąc twój angielski jest w porządku! Powodzenia. – shellter
@shellter: Cóż, chciałbym rozszerzyć moją funkcję bash, to będzie najlepsze. Ale jestem otwarty na wszystkie możliwe rozwiązania;) Ty za mój angielski! –