2010-08-25 30 views
5

Tôi đã đặt đoạn mã sau vào tệp ~/.localsh của mình để tùy chỉnh lời nhắc bash của tôi khi làm việc với git.Các yếu tố động trong bash PS1

Về cơ bản, tôi muốn hiển thị nhánh hiện tại trong thiết bị đầu cuối của mình. Công cụ gitk hiển thị các nhánh có nền màu xanh lá cây và nền trước màu đen, vì vậy đó là những gì tôi đang cố gắng làm.

Những gì tôi có, nhưng khi tôi nhấn mũi tên lên trên bàn phím để cuộn lại qua các lệnh trước, nó sẽ bị ghi đè.

Công cụ này đã xảy ra trước khi bạn không kết thúc chuỗi màu với [\ e [0m]. Bây giờ nó đang xảy ra với tôi vì gọi hàm getgitbranch. Tôi nghĩ rằng nó có một cái gì đó để làm với các thiết bị đầu cuối không biết bao lâu là dấu nhắc.

Vì vậy, cô ấy đặt ra câu hỏi ... Làm cách nào để sử dụng chính xác các yếu tố động trong dấu nhắc bash của tôi và không làm cho nó bị ẩn khi tôi sử dụng mũi tên lên?

function getgitbranch() 
{ 
git branch | grep "^\*" | cut -c3- 
} 

function blabla() 
{ 
PS1="" 
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] " 
PS1="$PS1\[\e[1;35m\][\[\e[0m\]" 
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]" 
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]" 
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] " 
export PS1 
} 
+2

Nếu bạn đang sử dụng hoàn thành git bash (tuyệt vời) bạn chỉ cần đặt $ (__ git_ps1) vào đó và nhận tên chi nhánh mạnh mẽ hơn nhiều - phản hồi nếu bạn đang giữa rebase, v.v. cũng như các chỉ số về trạng thái cây công việc của bạn (sửa đổi, sửa đổi theo giai đoạn). – Cascabel

Trả lời

5

Tháo \[\] từ khắp nơi trên $(getgitbranch). Các ký tự đầu ra bởi hàm đó thực sự chiếm không gian trên màn hình, do đó bạn muốn Bash tính đến chúng. Sử dụng \[\] nói không đếm các ký tự xuất hiện bên trong.

+0

Cảm ơn một nhóm đã làm việc. Tôi có lời nhắc sử dụng màu ngẫu nhiên mà tôi gọi là ... \\ [\ $ (randomColor) \\] Trong trường hợp đó tôi không muốn chúng được tính và trong trường hợp này tôi làm. –

Các vấn đề liên quan