บริบทและคำถาม
มีหลายวิธีในการปรับสีเทอร์มินัลและสภาพแวดล้อมเชลล์ เอาต์พุตของคำสั่งแต่ละคำสั่งเช่นls
และgrep
ยังสามารถทำให้เป็นสี ไม่เกี่ยวข้องโดยตรง แต่ที่น่าสนใจอย่างไรก็ตามความคิดของการเล่นสื่อที่คอนโซลแต่ดูเหมือนจะอาศัยกรอบ (ห้องสมุด) บางส่วนที่ด้านบนของระบบหน้าต่าง คำถามต่อไปนี้มุ่งที่bash
เชลล์เท่านั้นและการนำไปใช้ในกรอบงานเทอร์มินัล Linux และการสนับสนุน
โปรดพิจารณาการตัดต่อ ASCII ของ "การเรนเดอร์" ของฉากหนึ่งในเกม 2D :
นี่ไม่ใช่ฉากที่สร้างแบบสุ่ม กลุ่มที่ฉันเลือกทั้งหมดแสดงให้เห็นถึงรูปแบบของภูมิประเทศ "ทุ่งหญ้า" (ต้นไม้พุ่มไม้และพุ่มไม้ดอกไม้หญ้า ฯลฯ ) จากเกมที่ใช้อักขระ ASCII เพื่อเป็นตัวแทนวัตถุดังกล่าว 4 ฉากสุดท้ายที่ผู้ใช้แสดงสร้างชุดไพ่เรียงซึ่งโดยทั่วไปแล้วเป็นตัวละคร ASCII ที่มีสเปคสี (รายละเอียดดังกล่าวไม่สำคัญ - ก็เพียงพอแล้วที่จะบอกว่านี่เป็นแรงบันดาลใจทางสายตาสำหรับสิ่งที่ฉันพยายามทำให้สำเร็จในแง่ภาพและ " รูปแบบ ")
คุณสมบัติทั่วไปฉากเหล่านั้นในการตัดต่อแบ่งปันคือ:
- มากที่สุด 5-6 ตัวอักษร ASCII ที่แตกต่างกัน (เครื่องหมายจุลภาค, เครื่องหมายคำพูดและอื่น ๆ )
- ใช้ 2-4 สี
- สำหรับตัวละคร
- สำหรับพื้นหลังของตัวละครในบางกรณี - ตัวอย่างสุดท้ายคือการแสดงการใช้เฉดสีที่มีอักขระน้อยหรือไม่มีเลยเพื่อสร้างรูปแบบเช่นโมเสกสี
สิ่งที่ฉันมีใน VM ในขณะนี้คือArch Linuxและแม้ว่าคำถามจะไม่เจาะจงเฉพาะฉันได้ดูเอกสารประกอบของพวกเขาสำหรับการปรับแต่ง/etc/bash.bashrc
ไฟล์ ฉันสามารถเห็นได้ว่าการอธิบายจำนวนมากไปสู่การกำหนดค่าลักษณะที่ปรากฏของพรอมต์และโดยทั่วไปองค์ประกอบส่วนหน้าทั้งหมด มีข้อมูลเล็กน้อยเกี่ยวกับการกำหนดค่าใด ๆ สำหรับพื้นหลังยกเว้นปกติสำหรับสีทึบเช่นการตั้งค่าและเคล็ดลับเหล่านี้:
# Background
On_Black='\e[40m' # Black
On_Red='\e[41m' # Red
On_Green='\e[42m' # Green
On_Yellow='\e[43m' # Yellow
On_Blue='\e[44m' # Blue
On_Purple='\e[45m' # Purple
On_Cyan='\e[46m' # Cyan
On_White='\e[47m' # White
ฉันยังไม่เข้าใจว่าอะไรคือพื้นที่ว่าง / ว่าง / พื้นหลังที่ฉันไม่ได้พิมพ์เมื่อฉันใช้คอนโซลนั่นคือ "สิ่งที่พวกเขาทำมาจากอะไร" เพื่อที่จะพูด โดยเฉพาะอย่างยิ่งผู้ที่ไม่พร้อมรับคำและที่ล้อมรอบคำสั่งที่สะท้อน ในส่วนที่เกี่ยวกับสิ่งที่เกิดขึ้นบน line ที่ใช้งานอยู่มันเป็นไปได้ที่จะแสดงให้เห็นว่าbash
ทำหน้าที่ในลักษณะ "line-oriented" และการดำเนินการบางอย่างทำให้เกิดการเคลียร์ line ที่ใช้งานอยู่ ( for i in $(seq 1 $(expr $(tput lines) \* $(tput cols))); do echo -n M; done; tput cup 15 1
จากนั้นให้พิมพ์ char และ backspace ผู้สนับสนุน) - ขอบเขตที่อาจแตกต่างจาก CLI ไปยังอีกอย่างหนึ่งคือ zsh นอกจากนี้ดูเหมือนว่าเมื่อฉันเพิ่มบางสิ่งบางอย่างเช่น\[\033[44m\]
สาย PS1 ของฉันในbash.bashrc
ฉันได้รับพื้นหลังสีฟ้าหลังจากโหลดทุบตี - ดังนั้นฉันรู้ว่ามีบางอย่างใช้ประโยชน์จากที่นี่มากกว่าลักษณะที่ปรากฏของเอาท์พุทตราบเท่าที่พื้นหลังเป็นห่วง
แต่ฉันก็รู้ด้วยว่า bash เป็นซอฟต์แวร์ที่อาศัยสิ่งอำนวยความสะดวกอื่น ๆ ในรูปแบบของระบบย่อย TTYเพื่อนำสิ่งต่าง ๆ มาสู่หน้าจอและสิ่งนี้ลดลงจากที่นั่นไปยังส่วนประกอบ VTในเคอร์เนลที่ฉันคิด pstree -Ap
ใน Arch แสดงให้เห็นsystemd
การเชื่อมโยงไปแล้วlogin
bash
การกระจายArch Linuxอาศัยagetty
การบริการ TTY วิecho $TERM
จะให้ชนิดของเทอร์มินัลที่ใช้งานอยู่ ("linux" ที่นี่ด้านนอกของ DE) และinfocmp[-d spec1 spec2]
คำสั่งที่ไม่มีพารามิเตอร์แสดงความสามารถของเทอร์มินัลที่ใช้งานและข้อมูลโปรไฟล์จากฐานข้อมูลเทอร์มินัล terminfo (5) :
# Reconstructed via infocmp from file: /usr/share/terminfo/l/linux
linux|linux console,
am, bce, ccc, eo, mir, msgr, xenl, xon,
colors#8, it#8, ncv#18, pairs#64,
acsc=+\020\,\021-\030.^Y0\333'\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l\E[?1c,
clear=\E[H\E[J, cnorm=\E[?25h\E[?0c, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h\E[?8c, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, flash=\E[?5h\E[?5l$, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=^J,
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,
kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, oc=\E]R,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m,
rmam=\E[?7l, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m,
rmul=\E[24m, rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, smam=\E[?7h, smir=\E[4h,
smpch=\E[11m, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\E[c,
vpa=\E[%i%p1%dd,
ความสามารถหลายอย่างสามารถยกระดับจากเทอร์มินัลเฟรมเวิร์กและเป็นคุณสมบัติที่เปิดเผยในไฟล์กำหนดค่า bash.bashrc ตราบเท่าที่พร้อมท์ถูกปรับแต่งโดยการตั้งค่าตัวแปร PS1 ลำดับการควบคุมและหลบหนีถูกใช้เพื่อขัดจังหวะการไหลของอักขระที่แสดงในเทอร์มินัลโดยทั่วไปเพื่อจัดหาฟังก์ชันรวมถึงการย้ายเคอร์เซอร์และความสามารถอื่น ๆ ที่อธิบายไว้ในฐานข้อมูลข้อมูลเทอร์มินัล ฟังก์ชันเหล่านั้นจำนวนมากถูกส่งผ่านโดยใช้ตัวควบคุมลำดับที่รู้จักกันดีESC[
(หรือ \ 33) (ลำดับเพิ่มเติมที่นี่และที่นี่และตัวอย่างบางส่วน) นอกจากนี้ยังเป็นไปได้ที่จะใช้tput
ยูทิลิตี้โดยตรงบน CLI เพื่อเปลี่ยนคุณสมบัติของเทอร์มินัล; เช่นtput setab 4
จะมีคำสั่ง bash echo บนพื้นหลังสีน้ำเงิน
หากเราstrace bash
เราสามารถเห็นทั้งลำดับการหลบหนีและพฤติกรรมในการดำเนินการ:
write(2, "[il@Arch64vm1 ~]$ ", 19[il@Arch64vm1 ~]$ ) = 19 //bash starts
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, " ", 1) = 1 //pressed <space>
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, " ", 1 ) = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "\177", 1) = 1 //pressed <backspace>...
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "\10\33[K", ) = 4 //triggers erasing the line
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "\33", 1) = 1 //pressed <esc> per se
สิ่งนี้ให้บริบทสำหรับคำถามสามารถแทนที่ช่องว่าง / สีพื้นหลังในเทอร์มินัลด้วยชุดอักขระ ASCII แบบสุ่ม (แต่สวย) ได้หรือไม่ แต่ไม่ทราบว่าจะใช้งานคุณลักษณะต่าง ๆ หรือสิ่งที่ฉันกำลังค้นหาในเครื่องเทอร์มินัลได้อย่างไร
ดังนั้นฉันจึงสร้างการจำลองแบบหยาบเป็นตัวอย่างของผลลัพธ์สุดท้ายที่อาจมีลักษณะเช่นนี้หากเป็นไปได้ (ไม่จริงจัง :):
โดยทั่วไป "ช่องว่าง" ในเทอร์มินัลจะเต็มไปด้วยรูปแบบ (ที่นี่ฉัน "ไทล์" หนึ่งในภาพจากด้านบน แต่ฉันต้องการในการใช้งานจริงสำหรับแต่ละ "ว่าง" ที่จะสร้างแบบสุ่มจากชุดของ อักขระและคุณลักษณะ 5-6 ตัวบันทึกจากการตัดต่อซึ่งจะระบุ) มีรูปแบบที่แตกต่างกันสำหรับบรรทัดคำสั่งที่ใช้งานอยู่นั่นคือ "น้ำ" เป็นคลื่น แต่ฉันจะชำระให้บรรทัดนั้นเป็นสีน้ำเงิน ตามที่จินตนาการไว้คำสั่งจะ "ลบ" "น้ำ" ตามที่พวกเขาพิมพ์ลงบนสายที่ใช้งานอยู่และแน่นอนว่าข้อ จำกัด คือรูปแบบของตัวละครที่ไม่เคยตีความโดย CLI มิฉะนั้นมันจะไร้ประโยชน์
ดังนั้นจึงมีการกำหนดค่าใด ๆ ที่เปิดเผยในbash
หรือในกรอบเทอร์มินัลที่เหมาะสมหรือสคริปต์ที่จะอนุญาตให้ใช้ชุดของตัวละครและการควบคุมบางสีเพื่อปรับเปลี่ยนเอาต์พุตของ bash ในเทอร์มินัลเพื่อสร้างรูปแบบที่ค่อนข้างสุ่มสำหรับพื้นหลัง (ซึ่งจะคล้ายกับสิ่งที่ฉันได้แสดงไว้ข้างต้น)? หรือฉันควรจะทำอะไรบางอย่างเช่นพยายามที่จะให้ภาพเต็มรูปแบบเป็นพื้นหลังสำหรับ tty ?
การใช้งาน
0.1 - รุ่น PatternOTD (หนึ่งนัดตกลงเมื่อคุณเข้าสู่ระบบ)
นิพจน์ต่อไปนี้ที่ฉันเพิ่มลงในไฟล์. bashrc ของฉันรวบรวมแนวคิดบางอย่างที่เราสำรวจและถือเป็นการพิสูจน์แนวคิดขั้นพื้นฐาน (มาก) สำหรับภาพในเทอร์มินัล linux มาตรฐาน:
for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[32;32m'$(tr -dc '",.;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 15; tput setab 4; echo -en "\E[2K"; tput setab 0
ข้อสังเกต
- เห็นได้ชัดว่ามันเป็นเพียงคำสั่งจึงไม่ขัดขืนนั่นคือมันจะเลื่อนออกไปตามคำสั่งที่พิมพ์
- เลือกที่จะไม่สุ่มเลือกตัวละครเช่น
head -c 1
การtput cols
คูณบรรทัดที่จะเริ่มต้นด้วยซึ่งจะพิมพ์อักขระสุ่มแต่ละตัวจากการเลือกที่ยกมา - เพราะมันช้าเกินไป ฉันไม่คิดว่าrandom
จะสร้างจำนวนเต็ม (tput cols) แต่ก็ยังเร็วกว่า แน่นอนนี่มันสิ้นเปลืองอย่างมาก แต่ก็ใช้งานได้ - ยังไม่ได้สุ่มสีหรือเอฟเฟกต์ใด ๆ ต่อตัวละครหรืออย่างอื่นยกเว้นสีเขียวนั้นเพราะฉันอธิบายการเรนเดอร์ / ประมวลผลถ่านแต่ละตัวช้าเกินไป Re: framebuffer หรือไม่
- ฉันยินดีที่จะเห็นว่ารูปแบบดังกล่าวไม่ได้รบกวนการใช้งาน CLI ในแง่ที่ไม่ได้ตีความโดย CLI! (ทำไมถึงอธิบายไม่ได้)
- น้ำหายเร็วเกินไป! ;-)
0.2 - งานแฮ็ก PROMPT_COMMAND
ค่าของตัวแปรPROMPT_COMMANDจะถูกตรวจสอบก่อนที่ Bash จะพิมพ์พรอมต์หลักแต่ละรายการ ฉันรู้ว่าปกติคุณจะใช้ตัวแปรเพื่อเรียกสคริปต์ที่คุณสามารถประมวลผลองค์ประกอบจากการแสดงผล ฯลฯ แต่ฉันค่อนข้างพยายามทำโดยตรงในไฟล์. bashrc ของฉัน ตอนแรกผมคิดว่าผมสามารถใช้บางส่วนเช่นการรับรู้ตำแหน่งที่เป็นเคอร์เซอร์ก่อนที่จะดำเนินการ (ดังนั้นฉันจะไปทำให้สิ่งที่อยู่บนหน้าจอที่มีทุกที่tput
แล้วกลับมาที่ตำแหน่งที่ผมเป็นมาก่อนโดยใช้บางสิ่งบางอย่างเช่นนี้ไปยังตำแหน่งที่สารสกัดจาก:
stty -echo; echo -n $'\e[6n'; read -d R x; stty echo; echo ${x#??} //value is in x;x format so...
cut -f1 -d";"
ฉันจะท่อค่า ฉันสามารถทำสิ่งนี้ได้บน CLI แต่การทำให้งานนี้เป็นไปตามลำดับขององค์ประกอบในตัวแปร PS1 / P_C ไม่สามารถเข้าถึงได้ในขณะนี้และเป็นไปได้ว่าคำสั่งใดก็ตามที่ใส่ใน PROMPT_COMMAND อาจไม่ได้รับการประเมิน เพียงครั้งเดียว (?) แม้จะถูกประหารชีวิตทุกครั้ง (ดูข้อสังเกตด้านล่าง)
ดังนั้นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือดำเนินการตามลำดับเริ่มต้นของฉันและเพิ่มคำสั่งบางอย่างให้กับทั้ง PROMPT_COMMAND และคำจำกัดความของตัวแปร PS1 ใน. bashrc ชอบมาก
PROMPT_COMMAND="echo -en '\E[32;32m'$(tr -dc ',.:~' < /dev/urandom | head -c $(echo "$[$(tput cols) * 2]"))"
PS1="$(echo -en '\n') $(tput setab 4)$(echo -en "\E[2K")$(tput setab 0)\[\033[7;32m\]df:\[\033[1;34m\] \W @d \[\033[0m\]\e[32m"
for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[32;32m'$(tr -dc '",.;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 1; tput setab 4; echo -en "\E[2K"; tput setab 0
โดยสรุปฉันใช้ P_C เพื่อพยายามใช้รูปแบบภาพที่คงอยู่นั่นคือเพิ่ม 2 บรรทัด น่าเสียดายที่ฉันไม่สามารถสร้างทั้งสองรูปแบบนี้ได้ในขณะที่ย้ำเคล็ดลับ "น้ำ" ของฉันซ้ำนั่นคือการมีสีน้ำเงินเส้นที่ใช้งานอยู่ (ซึ่งเพิ่งเปลี่ยนสีพื้นหลังทำเส้นชัดเจนแล้วเปลี่ยนพื้นหลังกลับเป็นสีดำ) ฉันได้รวบรวมรูปภาพเพื่อแสดงว่าสิ่งนี้เล่นด้วยกันได้อย่างไร:
ข้อสังเกต
- การใช้ Backspace บนบรรทัดยังคงทำให้เกิดการทำงานของเส้นที่ชัดเจนและสีฟ้าหายไป
- ทุกครั้งที่กดปุ่ม Enter เรามีรูปแบบ 2 บรรทัดก่อนบรรทัดที่ใช้งานใหม่
- แน่นอนว่าเมื่อเราเห็นเพิ่มเติมแม้จะมีบรรทัดเพิ่มเติมเราไม่ได้ห่อรูปแบบที่ด้านข้างของคำสั่งเช่น
ls
- / dev / urandom ของสุ่มดูเหมือนจะไม่สุ่มเมื่อเรียกที่นี่ใน P_C ภาพนี้สร้างขึ้นจาก 2 ภาพ แต่มันง่ายที่จะรับว่ารูปแบบ 2 บรรทัดเพิ่มเติมนั้นจะเหมือนกันเสมอนั่นคือการสุ่มไม่ได้เกิดขึ้นทุกครั้งที่กดปุ่ม Enter แต่เพียงครั้งเดียวสำหรับแต่ละสองบรรทัด - อาจเป็นเพียงภาพแรกเท่านั้น .bashrc
bash
เวลาจะถูกอ่านโดย - เนื้อหาของตัวแปร PS1 เริ่มต้นด้วย
$(echo -en '\n') $(tput setab 4)
- นั่นคือพื้นที่ตรงกลางตรงนั้นก่อน $ (tput ... ), มันต้องอยู่ที่นั่นเพื่อให้มันใช้งานได้ ไม่เช่นนั้นเส้นสีฟ้าจะปรากฏขึ้นที่ด้านบนของพรอมต์และไม่ใช่ด้านหน้าและฉันไม่สามารถแก้ไขได้ และแฮ็คนี้เป็นชื่อที่ให้ 0.2 :)
0.3 - tput cuu
&tput cud
for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[0;32m'$(tr -dc '",.o;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 1
PROMPT_COMMAND="echo -en '\033[0;32m$(tr -dc ',;o.:~' < /dev/urandom | head -c $(tput cols))\n\033[36;44m$(tr -dc '~' < /dev/urandom | head -c $(tput cols))\033[0;32m$(tr -dc ',.o+;:~' < /dev/urandom | head -c $(tput cols))'$(tput cuu 2)"
PS1="\[\033[0m\] \[\033[1;32m\][1]\[\033[7;32m\]=2=:\W)\[\033[0;32m\]=3=\[\033[1;32m\]=4=@>\[\033[0;32m\]"
สิ่งที่ทำกับ PROMPT_COMMAND คือรูปแบบ 3 บรรทัดถูกพิมพ์ทุกครั้งก่อนที่จะสร้างพรอมต์และชุดรูปแบบทั้งสามชุดนั้นถูกสร้างขึ้นแยกกันภายใต้ข้อ จำกัด ที่อธิบายไว้ในข้อ 0.2 - ไม่มีความหมายสำหรับน้ำ จากนั้นเราขึ้นไปสองบรรทัด (โดยใช้tput cuu 2
) และสร้างพรอมต์บนเส้นกลางตาม PS1 เรายังคงมีชุดคำสั่งเริ่มต้นสำหรับรูปแบบเต็มหน้าจอในโหลด bashrc ซึ่งจะดำเนินการเพียงครั้งเดียวเมื่อเราเข้าสู่ระบบเทอร์มินัล ตอนนี้เรามีช่องว่างรอบ ๆ สายที่ใช้งานซึ่งมีรูปแบบสีน้ำเงินของตัวเองซึ่งจะได้รับการทำซ้ำเสมอเมื่อมีรถกลับ เนื้อหาของตัวแปร PS1 และ P_C ถูกทำให้สะอาด ไวยากรณ์ของลำดับ escape และการเข้ารหัสสีที่ฝังอยู่ภายในความยาวecho
ลำดับอาจเป็นเรื่องยุ่งยาก ข้อผิดพลาดนำไปสู่พฤติกรรมของเทอร์มินัลแปลกรวมถึงบรรทัดที่เขียนทับกันข้อความแจ้งที่ปรากฏจากระยะขอบด้านซ้ายหรือผลลัพธ์ที่ผิดปกติไปยังเนื้อหาที่ได้รับการประมวลผลโดยไม่ได้ตั้งใจ มีเงื่อนไขกับสิ่งที่ฉันทำซึ่งต้องใช้พื้นที่พิเศษภายในตัวแปร PS1 เพื่อตอบโต้ความแตกต่างทางภาพระหว่าง linux terminal และ lxterm ด้วยการตั้งค่าของฉัน (Arch Bang) หากไม่มีช่องว่างเพิ่มเติม linux terminal จะพิมพ์ตัวอักษรแรกของพรอมต์ที่ท้ายบรรทัดสุดท้ายด้วยเหตุผลบางอย่างที่ฉันไม่สามารถเข้าใจได้ (แน่นอนว่ามันเป็นสิ่งที่ฉันทำและไม่ใช่พฤติกรรมเริ่มต้น) ยังไม่สามารถหาวิธีสร้างเอฟเฟกต์แบบสุ่ม (ตัวหนาอินเวอร์สและอื่น ๆ ) ให้กับชุดของตัวอักษรในเครื่องหมายอัญประกาศเนื่องจากมีการตัดสินใจก่อนเพื่อสร้างสตริงที่ยาวขึ้นเพื่อเพิ่มประสิทธิภาพ
รูปแบบเริ่มต้นเมื่อเทอร์มินัลเปิด
พฤติกรรมหลังจากclear
และกดปุ่มป้อนอย่างต่อเนื่องที่พรอมต์
ข้อสังเกต
- ควรได้รับการออกแบบใหม่หรือปรับเปลี่ยนเพื่อใช้ colorizing ลวดลายที่เกินกว่าที่จะทำได้เป็นจำนวนมาก
- การเริ่มรู้สึกว่าการก้าวไปไกลกว่านั้นจะต้องมีการวางสิ่งเหล่านั้นลงในสคริปต์หรือใช้ประโยชน์จากรูปแบบที่สูงขึ้น แต่ความสามารถของเทอร์มินัลค่อนข้างเปิดใช้งานสำหรับผู้ใช้ (เตือนฉันถึง "โลโก้")!