Điểm:5

Cách thêm một dòng liền mạch trong bash bắt đầu từ cuối văn bản PS1 bên tay trái của tôi sang phía bên tay phải

lá cờ ru

Tôi đang gặp khó khăn trong việc giải quyết vấn đề nhỏ này

Về cơ bản, tôi đang sử dụng tập lệnh bash PS1 này vì nó khá hay:

PS1="\n \[\033[0;34m\]ââââââ\[\033[0;31m\]î²\[\033[ 0;37m\]\[\033[41m\] \u \[\033[0m\]\[\033[0;31m\]î°\[\033[0;34m\]ââ âââ\[\033[0;32m\]î²\[\033[0;30m\]\[\033[42m\] \w \[\033[0m \]\[\033[0;32m\]î° \n \[\033[0;34m\]â°ï \[\033[1;36m\]\$ \[\033[0m \]"

trông như thế này:

bash như đường dây điện

Điều tôi muốn làm là in dấu thời gian ở phía bên tay phải với một đường liền nét nối phần cuối của phần bên trái với phần đầu của phần bên phải của văn bản, ví dụ:

ben @ địa phương ------------------------------------------ 12:00 chiều

Tôi đã thử làm điều này:

$(printf '%*s' $COLUMNS '-')

nhưng điều đó rõ ràng chỉ tạo ra một dòng hoàn toàn mới chứa đầy dấu gạch ngang.

Làm thế nào để tôi có được giá trị của nơi con trỏ dừng lại, tôi thấy tput sc nhưng tôi không hiểu làm thế nào để sử dụng nó trong một biến? Sau đó in các dòng, có thể để lại 5 ký tự ở bên phải cho thời gian.

Đây là bước đột phá đầu tiên của tôi vào bash scripting vì vậy hãy tha thứ cho sự thiếu hiểu biết của tôi.

Bất kỳ trợ giúp được đánh giá cao

Điểm:7
lá cờ cn

Trước tiên, bạn phải loại bỏ các chuỗi thoát khỏi chuỗi dấu nhắc và mở rộng nó để lấy độ dài thực trừ đi độ dài cột.

prompt_handler(){
    cục bộ A="$2[\A]"

    while [[ $A =~ \[\x1b\[[0-9\;]*m\] ]]; làm
       A=${A//"${BASH_REMATCH}"}
    xong

    A=${A@P} \
    A=$((COLUMNS-${#A}))

    eval printf \
        -v A â%.s {1..$A}

    PS1="$1$2${A}[\A]$3"
}

PROMPT_COMMAND='prompt_handler "\n" " \[\033[0;34m\]ââââââ\[\033[0;31m\]î²\ [\033[0;37m\]\[\033[41m\] \u \[\033[0m\]\[\033[0;31m\]î°\[\033[0;34m\] âââââ\[\033[0;32m\]î²\[\033[0;30m\]\[\033[42m\] \w \[ \033[0m\]\[\033[0;32m\]î°" "\n \[\033[0;34m\]â°ï \[\033[1;36m\]\$ \[\033[0m\]"'
terdon avatar
lá cờ cn
Điều này thực sự gọn gàng! Nó sẽ được hưởng lợi từ một số lời giải thích mặc dù vì bạn đang sử dụng các tính năng bash khác nhau mà nhiều người sẽ không biết đến. Chẳng hạn, tôi đã phải tra cứu `${A@P}` để biết rằng đó là một chế độ mở rộng đặc biệt làm cho biến được mở rộng như thể nó là một chuỗi dấu nhắc.

Đă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.