ลำดับ bash '\ 033 [999D' หมายถึงอะไรและอธิบายไว้ที่ไหน


19

ฉันเจอลำดับ bash เช่น\033[999Dและ\033[2K\rที่ใช้ในการจัดการกับงานพิมพ์ใน terminal แต่ลำดับเหล่านี้หมายความว่าอย่างไร ฉันจะหารายการ / สรุปบนเว็บเพื่อช่วยค้นหาความหมายของลำดับเหล่านี้ได้จากที่ใด


3
นี่คือลำดับของเทอร์มินัลไม่ใช่ลำดับ bash คุณต้องดูเอกสารประกอบเครื่องของคุณเพื่อกำหนดฟังก์ชั่น
Chris Down

1
ลำดับเหล่านั้นทำหน้าที่ในการปรับสีเอาท์พุท ตรวจสอบ: stackoverflow.com/questions/16845699/… และstackoverflow.com/questions/5947742/…
adizere

1
@adizere escape sequences บางส่วนไม่ทำการเปลี่ยนแปลงสี ลำดับใน Q นี้สำหรับการจัดการสายและการเคลื่อนไหวของเคอร์เซอร์ไม่ใช่สี
casey

คำตอบ:


32

ดูที่ลิงค์นี้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_codesxterm


ลิงค์ที่คุณรวมไว้เป็นเพียงหน้าที่ฉันค้นหา
อเล็กซ์

@Alex Glad ฉันพบมันด้วยตัวเองหน้าเว็บส่วนใหญ่ที่ฉันเห็นมี แต่สีและมีความซับซ้อนในการอ่าน นี่มันออกมาดีและเรียบง่าย
แกรม

โปรดระวังว่าการกระทำของรหัสหลบหนีขึ้นอยู่กับประเภทของเทอร์มินัล (และคุณสามารถเลียนแบบเทอร์มินัลหลายประเภทบนหน้าจอ / ระบบปฏิบัติการที่ทันสมัย) คุณสามารถใช้tputคำสั่งแทนเพื่อให้มีความสะดวกในการพกพามากขึ้น iirc (แต่มีค่าใช้จ่ายน้อยกว่าการครอบคลุมเฉพาะของเทอร์มินัลของคุณ) VT100 (หน้าหนึ่งที่พูดถึง) ได้รับการสนับสนุนจากหลาย ๆ คน (แต่ไม่ใช่ทุกอย่างที่รองรับฉันเชื่อว่า ... ) แต่ตัวแปร TERM ของคุณอาจถูกตั้งค่าเป็นเทอร์มินัลอื่นและสิ่งนี้อาจส่งผลต่อผลกระทบของคำสั่งบางอย่าง
Olivier Dulac

@ Olivier ถูกต้องtputเป็นวิธีที่แข็งแกร่งมากขึ้น แต่มันเป็นความเข้ากันได้ของ ANSI มากกว่าเทอร์มินัล VT100 ที่เฉพาะเจาะจงซึ่งตอนนี้ค่อนข้างแพร่หลายแม้ว่าฉันจะจินตนาการว่ามันเป็นไปได้ที่จะตั้งค่าxtermในโหมดที่ไม่ยอมรับ ฉันจะอัปเดตด้วยข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ฉันคิดว่า
แกรม

@Olivier จำนวนมากของการเลียนแบบขั้วยังตั้งTERM=xtermไป แต่ไม่ได้ดำเนินการทุกอย่างxtermไม่
แกรม

5

นี่\033คืออักขระเลี่ยงและลำดับเหล่านั้นไม่ได้ถูกทุบตีโดยเฉพาะ แต่ถูกตีความโดยเทอร์มินัล (ซอฟต์แวร์หรือฮาร์ดแวร์ (ผ่านเครือข่ายหรือสายอนุกรม)) ซึ่งโปรแกรม (ทุบตี) ทำงาน มีลำดับดังกล่าวมากมาย

สิ่งที่แต่ละคนทำขึ้นอยู่กับเทอร์มินัลที่มันขึ้นอยู่กับและอาจขึ้นอยู่กับลำดับก่อนหน้าใด ๆ ที่เปลี่ยนแปลงสถานะของเทอร์มินัล

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


3

'\ 033 [999D' เป็นเรื่องตลก เทอร์มินัลบางตัวใช้ลำดับการหลบหลีกน้อยลงดังนั้นอาจจำเป็นหากไม่มี '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' หรือ '\ r' จะทำงานตามปกติ ควร แต่ใครบ้างที่ใช้การแสดงผลข้อความพันคอลัมน์ ลำดับเหล่านี้มีหน้าคนที่อยู่ในลินุกซ์: console_codes (4) bjh21 มีรายละเอียดของรหัสทั้งหมด ขึ้นอยู่กับโปรแกรมที่แยกวิเคราะห์ '\ 033' การแทนที่ที่ชัดเจนยิ่งขึ้น '\ e' อาจมีให้

มันไม่ได้ตั้งใจที่จะใช้สิ่งเหล่านี้โดยตรง - วิธีที่ถูกต้องในการออกคำสั่งควบคุมเทอร์มินัลคือการใช้เลเยอร์นามธรรมเช่น ncurses - แต่มันทำงานได้ดีจากตัวอักษรสตริง


จุดดีฉันแค่คิดว่า\033[999Dมันจะสำรองในบรรทัดก่อนหน้า อาจเป็นผลมาจากการหลบรหัส;) คุณสามารถbashตีความรหัสการหลบหนีได้โดยตรงเช่น$'\033[999D'
Graeme

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.