Score:5

วิธีเพิ่มบรรทัดที่ไม่ขาดตอนใน bash โดยเริ่มจากส่วนท้ายของข้อความ PS1 ทางซ้ายมือของฉันไปทางขวามือ

ธง ru

ฉันมีปัญหาในการคิดเกี่ยวกับปัญหาเล็กน้อยนี้

โดยทั่วไปฉันใช้สคริปต์ทุบตี PS1 เพราะมันค่อนข้างเจ๋ง:

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

มีลักษณะดังนี้:

ทุบตีเหมือนสายไฟ

สิ่งที่ฉันต้องการทำคือพิมพ์การประทับเวลาทางด้านขวามือด้วยเส้นทึบเชื่อมปลายด้านซ้ายกับจุดเริ่มต้นของด้านขวาของข้อความ เช่น

เบน @ ท้องถิ่น ------------------------------------------ 12:00 น

ฉันพยายามทำสิ่งนี้:

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

แต่นั่นเป็นเพียงการสร้างบรรทัดใหม่ที่เต็มไปด้วยเครื่องหมายขีดคั่น

ฉันจะรับค่าของจุดที่เคอร์เซอร์ออกไปได้อย่างไร ฉันเข้าใจแล้ว tput sc แต่ฉันไม่เข้าใจวิธีใช้สิ่งนั้นในตัวแปร จากนั้นพิมพ์บรรทัดโดยปล่อยให้อักขระ 5 ตัวทางด้านขวาสำหรับเวลานั้น

นี่เป็นการโจมตีครั้งแรกของฉันในการเขียนสคริปต์ทุบตี ดังนั้นโปรดยกโทษให้ฉันด้วยความรู้เท่าไม่ถึงการณ์

ความช่วยเหลือใด ๆ ที่ชื่นชม

Score:7
ธง cn

ขั้นแรก คุณต้องตัดลำดับหลีกออกจากสตริงพร้อมท์และขยายเพื่อให้ได้ความยาวจริงเพื่อลบความยาวคอลัมน์

prompt_handler(){
    ท้องถิ่น A="$2[\A]"

    ในขณะที่ [[ $A =~ \[\x1b\[[0-9\;]*m\] ]]; ทำ
       A=${A//"${BASH_REMATCH}"}
    เสร็จแล้ว

    A=${A@P} \
    A=$((คอลัมน์-${#A}))

    eval printf \
        -v ก â%.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
cn flag
นี่มันเรียบร้อยจริงๆ! มันจะได้ประโยชน์จากคำอธิบายบางอย่าง เนื่องจากคุณใช้คุณสมบัติทุบตีต่างๆ ที่หลายคนไม่รู้จัก ฉันต้องค้นหา `${A@P}` ตัวอย่างเช่น เพื่อเรียนรู้ว่ามันเป็นโหมดขยายพิเศษที่ทำให้ตัวแปรถูกขยายราวกับว่ามันเป็นสตริงพร้อมท์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา