và Chúc mừng năm mới. Đây là một vấn đề khó khăn để phục hồi từ bữa ăn tối Giáng sinh!SVN: Thêm màu sắc trên dòng lệnh svn với awk (in bash)
Đây là một phần của mã Bash (tôi đặt nó trong .bashrc tập tin) Mà làm việc:
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.";
}';
}
này một phần của mã thực hiện chính xác những gì tôi muốn. Các chức năng svn (trạng thái, cập nhật, vv) được in với màu sắc. Đối với nhu cầu nội bộ, tôi không muốn cài đặt những thứ như colorsvn hoặc svn-color.
Dưới đây là một ví dụ về đoạn code trên: (không có uy tín enought để đăng hình ảnh)
Và một lần nữa, đó là một cách hoàn hảo những gì tôi muốn. Vấn đề xảy ra khi xung đột được tìm thấy (ví dụ khi tôi cập nhật): thực sự, khi một tệp bị xung đột, svn được chuyển giao cho người dùng, để cho anh ta nhập một vài chữ cái (xem bên dưới)
# 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:
Có cách nào để làm cho người dùng gõ một cái gì đó (ví dụ: ví dụ e, mở trong VIm tập tin xung đột), làm điều gì đó (chẳng hạn xóa một số dòng sau loại e, sau đó lưu & quit), và nhập một chữ khác để xác nhận xung đột giải quyết, sau đó cuối cùng sẽ hiển thị bước tiếp theo của cập nhật svn (các tệp khác, v.v.)?
Nói cách khác, tôi muốn "tạm dừng" tập lệnh hiển thị màu để cho phép người dùng tương tác với svn, sau đó cập nhật svn tiếp tục. Tôi nghĩ rằng nó sẽ rất hữu ích cho tương lai để biết làm thế nào có thể để awk tạm dừng các kịch bản người gọi, sau đó tiếp tục!
Tôi đã làm cho bản thân mình đủ rõ ràng chưa? Tiếng Anh của tôi không tốt như tôi muốn:/
Nếu bạn cần chi tiết, vui lòng hỏi!
Lệnh 'svn' của bạn vẫn nhận được đầu vào của bạn. Có những công cụ như 'mong đợi' để chuyển đổi giữa thực thi tự trị và tương tác, nhưng nó có thể hơi khác bên cạnh điểm ở đây. Giải pháp chính xác là một trình bao bọc cấp thấp hơn, tôi đoán giống như những gì bạn nói bạn không muốn sử dụng. Script awk của bạn nhận được frim đầu vào của nó một đường ống nhưng bạn có thể có thể hack một cái gì đó trong để thêm một chế độ mà nó đọc đầu vào bổ sung từ '/ dev/tty' hoặc một số như vậy. – tripleee
Bạn có muốn mở rộng hàm bash của bạn 'svn' để xử lý tất cả điều này, hay bạn hình dung rằng việc 'tạm dừng' bắt buộc là mã riêng biệt sau khi hàm' svn' đã chạy? Ngẫu nhiên tiếng anh của bạn là tốt! Chúc may mắn. – shellter
@shellter: Vâng, tôi muốn mở rộng chức năng bash của tôi, nó sẽ là tốt nhất. Nhưng tôi mở tất cả các giải pháp có thể;) Ty cho tiếng anh của tôi! –