ฉันเจอลำดับ bash เช่น\033[999D
และ\033[2K\r
ที่ใช้ในการจัดการกับงานพิมพ์ใน terminal แต่ลำดับเหล่านี้หมายความว่าอย่างไร ฉันจะหารายการ / สรุปบนเว็บเพื่อช่วยค้นหาความหมายของลำดับเหล่านี้ได้จากที่ใด
ฉันเจอลำดับ bash เช่น\033[999D
และ\033[2K\r
ที่ใช้ในการจัดการกับงานพิมพ์ใน terminal แต่ลำดับเหล่านี้หมายความว่าอย่างไร ฉันจะหารายการ / สรุปบนเว็บเพื่อช่วยค้นหาความหมายของลำดับเหล่านี้ได้จากที่ใด
คำตอบ:
ดูที่ลิงค์นี้http://www.termsys.demon.co.uk/vtansi.htm ดังที่ Anthon กล่าวว่า\033
เป็นรหัสฐานแปดของ C สำหรับตัวละครในการหลบหนี การ[999D
ย้ายเคอร์เซอร์กลับไปที่ 999 คอลัมน์น่าจะเป็นวิธีที่ดุร้ายของการเริ่มต้นของบรรทัด [2K
ลบบรรทัดปัจจุบัน \r
คือ carriage return ซึ่งจะเลื่อนเคอร์เซอร์กลับไปที่จุดเริ่มต้นของบรรทัดปัจจุบันและเป็นลำดับการหลบหลีกแบบ C แทนการควบคุมเทอร์มินัล
ดังที่คนอื่น ๆ ได้ชี้ให้เห็นลำดับการควบคุมเหล่านี้ไม่มีอะไรที่จะทำbash
เอง แต่เป็นอุปกรณ์ปลายทาง / ตัวจำลองที่ข้อความปรากฏ กาลครั้งหนึ่งเป็นเรื่องปกติที่ลำดับเหล่านี้จะถูกตีความโดยชิ้นส่วนฮาร์ดแวร์ที่แตกต่างอย่างสิ้นเชิง ในขั้นต้นแต่ละคนจะตอบสนองต่อชุดของรหัสที่แตกต่างกันโดยสิ้นเชิง เพื่อจัดการกับสิ่งนี้termcap
และterminfo
ไลบรารีที่ใช้ในการเขียนโค้ดที่เข้ากันได้กับเทอร์มินัลหลายเครื่อง tput
คำสั่งเป็นอินเตอร์เฟซกับterminfo
ห้องสมุด ( termcap
การสนับสนุนนอกจากนี้ยังสามารถรวบรวมใน) และเป็นวิธีที่มีประสิทธิภาพมากขึ้นเพื่อสร้างลำดับที่เข้ากันได้
ที่กล่าวว่านอกจากนี้ยังมีANSI X3.64 หรือ ECMA-48มาตรฐาน การใช้เทอร์มินัลสมัยใหม่ใด ๆ จะใช้สิ่งนี้ terminfo
และtermcap
ยังคงมีความเกี่ยวข้องเนื่องจากการดำเนินการอาจไม่สมบูรณ์หรือรวมส่วนขยายที่ไม่ได้มาตรฐานอย่างไรก็ตามสำหรับจุดประสงค์ส่วนใหญ่จะปลอดภัยที่จะสมมติว่าลำดับ ANSI ทั่วไปจะใช้งานได้
xterm
คำถามที่พบบ่อยให้ข้อมูลที่น่าสนใจบางอย่างเกี่ยวกับความแตกต่างระหว่างการเลียนแบบขั้วที่ทันสมัย (หลายเพียงแค่พยายามที่จะเลียนแบบxterm
ตัวเอง) และวิธีการxterm
ลำดับที่เกี่ยวข้องกับขั้ว VT100 กล่าวถึงในการเชื่อมโยงดังกล่าวข้างต้น นอกจากนี้ยังมีรายการxterm
ลำดับการควบคุมที่ชัดเจน
นอกจากนี้ยังใช้กันทั่วไปของหลักสูตรเป็นลินุกซ์คอนโซลรายการสรุปของลำดับการควบคุมเพื่อที่จะสามารถพบได้ในพร้อมกับเปรียบเทียบกับman console_codes
xterm
tput
คำสั่งแทนเพื่อให้มีความสะดวกในการพกพามากขึ้น iirc (แต่มีค่าใช้จ่ายน้อยกว่าการครอบคลุมเฉพาะของเทอร์มินัลของคุณ) VT100 (หน้าหนึ่งที่พูดถึง) ได้รับการสนับสนุนจากหลาย ๆ คน (แต่ไม่ใช่ทุกอย่างที่รองรับฉันเชื่อว่า ... ) แต่ตัวแปร TERM ของคุณอาจถูกตั้งค่าเป็นเทอร์มินัลอื่นและสิ่งนี้อาจส่งผลต่อผลกระทบของคำสั่งบางอย่าง
tput
เป็นวิธีที่แข็งแกร่งมากขึ้น แต่มันเป็นความเข้ากันได้ของ ANSI มากกว่าเทอร์มินัล VT100 ที่เฉพาะเจาะจงซึ่งตอนนี้ค่อนข้างแพร่หลายแม้ว่าฉันจะจินตนาการว่ามันเป็นไปได้ที่จะตั้งค่าxterm
ในโหมดที่ไม่ยอมรับ ฉันจะอัปเดตด้วยข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ฉันคิดว่า
TERM=xterm
ไป แต่ไม่ได้ดำเนินการทุกอย่างxterm
ไม่
นี่\033
คืออักขระเลี่ยงและลำดับเหล่านั้นไม่ได้ถูกทุบตีโดยเฉพาะ แต่ถูกตีความโดยเทอร์มินัล (ซอฟต์แวร์หรือฮาร์ดแวร์ (ผ่านเครือข่ายหรือสายอนุกรม)) ซึ่งโปรแกรม (ทุบตี) ทำงาน มีลำดับดังกล่าวมากมาย
สิ่งที่แต่ละคนทำขึ้นอยู่กับเทอร์มินัลที่มันขึ้นอยู่กับและอาจขึ้นอยู่กับลำดับก่อนหน้าใด ๆ ที่เปลี่ยนแปลงสถานะของเทอร์มินัล
สิ่งเหล่านี้มักจะใช้เพื่อตั้งค่าสีในพรอมต์ bashแต่ฉันไม่พบตัวอย่างเฉพาะของคุณในหน้านั้น
'\ 033 [999D' เป็นเรื่องตลก เทอร์มินัลบางตัวใช้ลำดับการหลบหลีกน้อยลงดังนั้นอาจจำเป็นหากไม่มี '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' หรือ '\ r' จะทำงานตามปกติ ควร แต่ใครบ้างที่ใช้การแสดงผลข้อความพันคอลัมน์ ลำดับเหล่านี้มีหน้าคนที่อยู่ในลินุกซ์: console_codes (4) bjh21 มีรายละเอียดของรหัสทั้งหมด ขึ้นอยู่กับโปรแกรมที่แยกวิเคราะห์ '\ 033' การแทนที่ที่ชัดเจนยิ่งขึ้น '\ e' อาจมีให้
มันไม่ได้ตั้งใจที่จะใช้สิ่งเหล่านี้โดยตรง - วิธีที่ถูกต้องในการออกคำสั่งควบคุมเทอร์มินัลคือการใช้เลเยอร์นามธรรมเช่น ncurses - แต่มันทำงานได้ดีจากตัวอักษรสตริง
\033[999D
มันจะสำรองในบรรทัดก่อนหน้า อาจเป็นผลมาจากการหลบรหัส;) คุณสามารถbash
ตีความรหัสการหลบหนีได้โดยตรงเช่น$'\033[999D'
คุณสามารถค้นหา "033 เทอมการหลบหนี" หรือ " 033 tput " และดูhttp://wiki.bash-hackers.org/scripting/terminalcodesเพื่อรับข้อมูลเพิ่มเติมก่อนที่จะมีคนตอบรับ]