Điểm:1

Thiết bị đầu cuối XFCE - thay đổi màu của dấu nhắc đầu vào bắt vít dòng đầu vào

lá cờ de

Câu hỏi này là phần tiếp theo của câu trả lời cho câu hỏi này, liên quan đến việc thay đổi màu của lời nhắc nhập liệu của người dùng trong thiết bị đầu cuối XFCE: Thiết bị đầu cuối Ubuntu (Xfce): làm cho các lệnh đầu vào có màu phông chữ khác với văn bản đầu ra

Vì tôi không được phép bình luận ở đó (danh tiếng tối thiểu 50), tôi phải mở một câu hỏi mới.

Theo câu trả lời, tôi đã sử dụng lệnh sau:

PS1='\e[1;36m\u@\h \W]\$\e[0m '

Thao tác này giữ nguyên định dạng như mặc định, nhưng thay đổi màu thành lục lam, như mong đợi.

Tuy nhiên, tôi đang nhận được một số hành vi rất lạ. Đôi khi con trỏ sẽ nhảy trở lại dòng nhập và đôi khi nó sẽ hiển thị văn bản cũ không nên có ở đó. Đôi khi nó tách thành hai dòng để tôi tiếp tục gõ ở dòng trên. Ví dụ:

Nói rằng tôi muốn làm:

$ cd/một số/đường dẫn/đến/a/thư mục

nhưng khi tôi gõ nó trở thành như thế này:

$ cd /some/pa/directoryath/to

mình gõ enter thì nó vẫn đọc đúng lệnh, chỉ là màn hình hiển thị sai thôi. Khi nó xảy ra, nếu tôi cố gắng sử dụng backspace, nó sẽ biến thành một thứ như thế này:

$ cd /some/pa/directoryath/to
$ cd /some/pa/directo
$ cd /some/pa -------- tại thời điểm này tôi không thể xóa bất kỳ thứ gì khác,
                           trong màn hình một số ký tự vẫn còn 
                           kéo dài, nhưng nếu tôi gõ enter thì không có gì trên dòng đầu vào

Một ví dụ khác, nói rằng tôi đã hiển thị như sau:

$ ls
thư mục1 thư mục2 thư mục3 thư mục4

và bây giờ tôi muốn gõ một số lệnh khác, thì điều sau đây có thể xảy ra:

$ ls
thư mục1 thư mục2 thư mục3 thư mục
$ cd /some/path/to/a/di

Một lần nữa, nếu tôi gõ enter thì đầu vào được nhận dạng chính xác, nhưng màn hình bị hỏng.

Sự cố xảy ra thường xuyên nhất, nhưng không chỉ xảy ra khi tôi nhập mũi tên lên để nhận lệnh trước đó hoặc khi dòng nhập tiếp cận cạnh phải của cửa sổ.

sudodus avatar
lá cờ jp
Tôi nghĩ vấn đề của bạn là do cách trình tự ANSI được diễn giải và tương tác với các cách khác để giao tiếp với giao diện dòng lệnh.Tôi đã nhận thấy rằng lỗi này sẽ gây ra sự cố, chẳng hạn như khi bạn có một dòng lệnh dài, dòng lệnh đó sẽ chạm tới đường viền bên phải của cửa sổ/màn hình và được bao bọc. - Tôi sử dụng cách này để nhận được dấu nhắc có màu và tôi gặp vấn đề này vì việc có dấu nhắc có màu sẽ giúp ích rất nhiều.
bjorn avatar
lá cờ de
Nếu nó chỉ xảy ra trong quá trình gói, tôi cũng có thể sống chung với nó. Nhưng như bây giờ, hầu như mỗi khi tôi sử dụng nút lên, nó sẽ bị hỏng và mọi lệnh thứ mười hoặc ngắn hơn, cũng sẽ gặp sự cố. Hiện tại, rất tiếc là nó không thể sử dụng được đối với tôi... Tuy nhiên, nếu đó là lỗi, tôi đoán cách tiếp cận đúng sẽ là gửi báo cáo lỗi.
sudodus avatar
lá cờ jp
Bạn đang sử dụng phiên bản giả lập Ubuntu, bash và thiết bị đầu cuối nào? Bạn đã thử một trình giả lập thiết bị đầu cuối khác chưa?
Điểm:0
lá cờ cn

Bạn cần đính kèm các chuỗi thoát của thiết bị đầu cuối và chỉ những chuỗi đó, giữa \[\].

Nhìn vào đánh đậptrang thủ công của, trong phần "NHẬN".

Thay vì

PS1='\e[1;36m\u@\h \W]\$\e[0m '

bạn nên viết

PS1='\[\e[1;36m\]\u@\h \W]\$\[\e[0m\] '
Điểm:0
lá cờ jp

Tôi đã kiểm tra và nhận thấy có vấn đề với lời nhắc của bạn, có vẻ như nó mong đợi lề phải quá sớm và làm ngắt dòng.

Hãy thử cái này, mà tôi sử dụng

nếu [ "$USER" = root ]; sau đó
    PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h \[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$'
khác
    PS1='\[\033[01;31m\]$(statstring)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h \[\033[00m\] \[\033[01;34m\]\w\[\033[00m\] \$'
fi

và nếu nó hoạt động, ít nhất bạn có thể đặt nó vào ~/.bashrc của mình cho các shell tương tác. tôi sử dụng

trường hợp "$TERM" trong
xterm-color)
....

để quyết định khi nào sử dụng nó và bạn có thể kiểm tra thứ gì đó phù hợp với thiết lập của mình.


Chỉnh sửa: Thêm một chức năng để tạo chuỗi thống kê trước khi bạn đặt lời nhắc trong ~/.bashrc

chuỗi thống kê hàm {
RC=$?
  nếu [ "0" != $RC ]; sau đó
    printf "[$RC] "
  fi
}
bjorn avatar
lá cờ de
Cảm ơn bạn! Tôi đã phải xóa $(statstring) nhưng bây giờ có vẻ như nó đang hoạt động như mong đợi. Chính xác thì điều gì trong nỗ lực ban đầu của tôi đã gây ra sự cố? n.b. Tôi cũng gặp vấn đề tương tự với các đề xuất trong câu hỏi được liên kết.
sudodus avatar
lá cờ jp
Tôi không chắc tại sao lời nhắc cũ của bạn lại sai. Nó khác của mình ở đoạn cuối (thứ tự giữa ký tự $ và dãy ANSI), có lẽ vì thế mà nó bị sai. Ngoài ra, các trình tự ANSI hơi khác nhau, có thể tạo ra các kết quả khác nhau. -- Vui lòng chỉnh sửa câu trả lời và cố gắng sử dụng `statstring`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.