Puncte:5

Cum să adaug o linie neîntreruptă în bash, începând de la capătul textului PS1 din partea stângă până în partea dreaptă

drapel ru

Întâmpin probleme în a-mi încheia mintea în jurul acestei mici probleme

Practic, folosesc acest script bash PS1 pentru că e cam grozav:

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 \]"

arata asa:

bash ca powerline

Ceea ce vreau să fac este să imprim un marcaj de timp pe partea dreaptă cu o linie continuă care conectează sfârșitul părții stângi de începutul părții drepte a textului, de exemplu:

ben @ local ------------------------------------------12:00pm

Am incercat sa fac asta:

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

dar asta, evident, creează o linie cu totul nouă plină cu liniuțe.

Cum obțin valoarea de unde a rămas blestemul, văd tput sc dar nu înțeleg cum să folosesc asta într-o variabilă? Apoi imprimați liniile, lăsând poate 5 caractere în partea dreaptă pentru momentul respectiv.

Aceasta este prima mea incursiune în scripting-ul bash, așa că iartă-mi ignoranța.

Orice ajutor este apreciat

Puncte:7
drapel cn

În primul rând, trebuie să eliminați secvențele de escape din șirul prompt și să îl extindeți pentru a obține lungimea reală pentru a scădea lungimea coloanei.

prompt_handler(){
    local A="$2[\A]"

    în timp ce [[ $A =~ \[\x1b\[[0-9\;]*m\] ]]; do
       A=${A//"${BASH_REMATCH}"}
    Terminat

    A=${A@P} \
    A=$((Coloane-${#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
drapel cn
Acesta este cu adevărat îngrijit! Totuși, ar beneficia de unele explicații, deoarece utilizați diverse funcții bash care nu vor fi cunoscute de mulți. A trebuit să caut `${A@P}`, de exemplu, pentru a afla că este un mod de expansiune special care face ca variabila să fie extinsă ca și cum ar fi un șir prompt.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.