สัญลักษณ์แฮช (#) เปลี่ยนเป็นสัญลักษณ์ปอนด์ (£) หลังจากใส่เลขฐานสอง


42

นี่เป็นวิธีที่ bash prompt ของฉันใช้ในการดูเหมือน

ทุบตีเก่าพรอมต์

จากนั้นฉันก็ทำอะไรบางอย่างที่อาจไม่ฉลาดcat /bin/bashนัก และตอนนี้ bash prompt ของฉันก็เป็นแบบนี้ด้วยสัญลักษณ์ปอนด์ (£) แทนที่จะเป็นสัญลักษณ์แฮช (#) มันยังส่งผลกระทบต่อสัญลักษณ์แฮชภายในไฟล์ดูที่นี่:

สัญลักษณ์ปอนด์ในไฟล์

ความคิดใด ๆ วิธีการคืนค่านี้?

แก้ไข:คำถามนี้ไม่ถามว่า "จะเปลี่ยน bash prompt ของฉันได้อย่างไร" แต่ "bash prompt ของฉันเปลี่ยนไปด้วยตัวเองฉันจะคืนค่าได้อย่างไร"

สมบูรณ์แบบ.bashrcสำหรับผู้ที่สนใจ


2
เป็นไปได้ที่ซ้ำกันของวิธีเปลี่ยนพรอมต์ใน Linux?
Kevdog777

1
(ฉันใช้เสรีภาพในการแก้ไขชื่อเล็กน้อยเพื่อให้เกิดสิ่งที่ทำให้เกิดปัญหาแก้ไขหรือย้อนกลับได้ตามที่คุณต้องการ)
ilkkachu

9
พรอมต์ไฟล์อื่น ๆ ยังคงมีรหัสอักขระสำหรับ#, \x23; มันเป็นเพียงแค่ว่าตอนนี้ตีความขั้วเป็น\x23 £
deltab

4
ส่วนที่น่าสนใจคือ "ปอนด์" เป็นอีกชื่อหนึ่งของสัญลักษณ์แฮชในอเมริกา (และอาจเป็นสัญชาติอื่น ๆ ) อังกฤษ ... =)
jpmc26

1
โปรแกรมเทอร์มินัลนี้ทำอะไรใน
SnoringFrog

คำตอบ:


102

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

พื้นหลังทางประวัติศาสตร์ของเรื่องนี้ก็คือในตอนแรกเทอร์มินัลค่อนข้างจะเป็นอุปกรณ์ที่มีหน้าจอและคีย์บอร์ดเป็นใบ้และพวกเขาเชื่อมต่อกับคอมพิวเตอร์จริงผ่านพอร์ตอนุกรม ก่อนหน้านั้นเคยเป็นเครื่องพิมพ์ที่มีแป้นพิมพ์ มีโปรโตคอลไม่มากนักในการแยกข้อมูลไบต์ออกจากคำสั่งไบต์ดังนั้นคำสั่งถูกกำหนดให้กับเทอร์มินัล "inline" (หรือมากกว่านั้นรหัสหลบหนีและตัวควบคุมคือโปรโตคอล) หนึ่งอาจคิดว่าหากระบบได้รับการคิดค้นในวันนี้จะมีการแยกชัดเจนระหว่างข้อมูลและคำสั่ง

แทนที่จะปิดหน้าต่างเทอร์มินัลหรือฆ่าอีมูเลเตอร์คุณสามารถใช้resetคำสั่งซึ่งส่งคำสั่งที่คล้ายกัน (หรือหลาย ๆ ) เพื่อรีเซ็ตเทอร์มินัลกลับไปเป็นค่าเริ่มต้นที่มีสติ

ฉันไม่รู้ว่าอะไรจะทำให้แฮชเปลี่ยนไป (แต่ @ Random832 ทำดูคำตอบของพวกเขา ) ฉันคุ้นเคยกับ "ชุดอักขระทางเลือก" ซึ่งสามารถเปลี่ยนอักขระทั้งหมดให้เป็นร่ายมนตร์วาดเส้น แม้ว่าจะเป็นเช่นนั้นการป้อนข้อมูลจากแป้นพิมพ์มักจะไม่มีการเปลี่ยนแปลงดังนั้นการเขียนresetEnterยังคงใช้ได้แม้ว่าอักขระจะแสดงเป็นขยะหรือไม่ก็ตาม (เมื่อเปรียบเทียบกับข้อความแจ้งของคุณที่ถูกเปลี่ยนเป็นกลุ่มบรรทัดคุณจะได้รับผลกระทบเล็กน้อย)


1
ขอบคุณสำหรับคำอธิบายโดยละเอียด ฉันจะโหวตทันทีที่ฉันมีชื่อเสียงที่จำเป็น
lhermann

2
เมื่อฉันได้ลองcat /dev/urandomใน Debian คอนโซลการติดตั้งครั้งแรก(ความละเอียดหน้าจอที่ทำให้ฮาร์ดแวร์ยึดติดกับสมอง) ฉันคิดว่าฉันเปิดใช้งานโอเวอร์โฟลว์และสำรวจเส้นทางของฉันอย่างรวดเร็วไปยังปุ่ม "ละทิ้งการเปลี่ยนแปลงทั้งหมดรีสตาร์ทเครื่อง" ตอนนี้ฉันรู้แล้วว่ามันเป็น "คุณสมบัติที่ตั้งใจไว้"
wizzwizz4

2
มันเป็นคุณสมบัติที่ตั้งใจในอดีตที่ไม่พึงประสงค์ในขณะนี้ เทอร์มินัลอีมูเลเตอร์บางส่วน (ดีทั้งหมด) ควรปิดการทำงานของสวิตช์ชุดอักขระแบบดั้งเดิมเมื่อทำงานในสภาพแวดล้อม UTF-8 แต่ไม่ว่าจะทำเช่นนั้นหรือไม่และวิธีการเปิดใช้งานตัวเลือกในการทำเช่นนั้นถ้าไม่ใช่ค่าเริ่มต้น แตกต่างกันไป
..

78

สำหรับบันทึกให้ตอบว่าทำไมสิ่งนี้จึงเกิดขึ้นและจะแก้ไขอย่างไรโดยไม่ปิดเทอร์มินัล (และหากresetล้มเหลว):

ขั้วหลายคนสนับสนุนเป็นคุณลักษณะของที่VT220ขั้วพวกเขาจะลอกเลียนแบบจำนวนทดแทนแห่งชาติชุดตัวอักษรที่อยู่บนพื้นฐานของมาตรฐาน ISO 646และISO 2022 โดยเฉพาะอย่างยิ่งมันเป็นเรื่องธรรมดามากด้วยเหตุผลบางอย่างแม้ว่าคนอื่นจะไม่ได้รับการสนับสนุนสำหรับพวกเขาที่จะสนับสนุนชุดอักขระอังกฤษซึ่งมีสัญลักษณ์สกุลเงินปอนด์อยู่ในตำแหน่งเดียวกับที่ ASCII มีเครื่องหมายตัวเลข

ดังนั้นเมื่อคุณพิมพ์ไฟล์ไบนารีไปยังเทอร์มินัลโดยบังเอิญส่งผลลัพธ์ออกมาเป็นลำดับESC ( A[หรือบางทีESC ) Aและ^N] ไปยังเทอร์มินัล สิ่งนี้สามารถยกเลิกได้ด้วยตนเองโดยพิมพ์ลำดับที่ตั้งเป็นสถานะปกติ:

printf '\e(B\e)0\x0f'

ฉันเดาอะไรแบบนี้โดยไม่รู้รายละเอียด ขอบคุณสำหรับคำอธิบาย ช่างดีเหลือเกินที่มีคนรอบตัวคุณ!
lhermann

1
โอ้ที่รักนกนางนวลแทนที่ÄและÖ ... และเทอร์มินัลใน OS X ยังรองรับการเปลี่ยนใหม่ในปี 2559 ถ้าฉันมีอีก upvote ให้
ilkkachu

@ilkkachu เทอร์มินัลบางตัวที่รองรับพวกเขา (ฉันรู้ว่า Putty และฉันคิดว่าคอนโซล Linux) ปฏิเสธพวกเขาเมื่อใช้ UTF-8 เพราะ ISO 2022 บอกว่าลำดับอื่น ๆ (นอกเหนือจากESC % @) จะไม่ได้รับการสนับสนุนในขณะที่อยู่ในสถานะ ที่ใช้เพื่อรองรับ UTF-8 ดังนั้นพวกเขาจึงอาจหายไปในที่สุดเนื่องจากมีการบังคับให้ใช้งาน UTF-8 มากขึ้นในการวาดเส้น [ซึ่งเป็นการใช้งานจริงที่ใช้กันอย่างแพร่หลายของคุณสมบัตินี้ตัวละครอื่น ๆ ส่วนใหญ่จะถูกรวมไว้เพราะมันเป็น "ฟรี" เมื่อคุณใช้กลไก ]
Random832

20
มันง่ายที่จะจำลำดับการหลบหนีเหล่านี้: "A" ย่อมาจากอังกฤษ "B" ย่อมาจาก "American": D
egmont

8
@egmont ฉันขุดลงไปในสิ่งนี้ตามที่ปรากฎพวกเขาได้รับมอบหมายตามลำดับในการลงทะเบียนกับ ISO อย่างแรกคือเวอร์ชันอ้างอิงระหว่างประเทศแบบเก่า [ด้วย¤for $] คือ @ และเวอร์ชันอังกฤษเกิดขึ้นก่อนที่คนอเมริกันจะเข้ามา itscj.ipsj.or.jp/itscj_english/index.htmlสำหรับรายการทั้งหมด
Random832

30

ปิดเทอร์มินัลแล้วเปิดใหม่


19
คุณไม่ควร คำถามนี้ถูกต้อง อาจมีบางคนอธิบายว่าทำไมสิ่งนี้จึงเกิดขึ้นอย่างละเอียด นี่ต้องเป็นรูใน Bash £อยู่ภายใต้คีย์เดียวกัน#กับที่เรียกAltเท่านั้น ยังไงก็เถอะAltพักใน Bash อย่างไรก็ตามคุณสามารถรอคำอธิบายที่เหมาะสมหรือถ้าคุณพอใจกับคำตอบของฉันคลิกที่เช็คเพื่อยอมรับมัน
Tomasz

1
หรือไม่ใช่ใน Bash แต่อยู่ในโปรแกรมเทอร์มินัล ฉันลองแบบเดียวกันบนบรรทัดคำสั่งด้านนอก GUI และมันจะวนซ้ำตลอดไป
Tomasz

5
@ Xalorous คำถามระบุว่าปัญหาปรากฏขึ้นเมื่อเขาcatเอ็ด/bin/bashไปยังสถานี
ilkkachu

2
Random832 ให้คำอธิบายที่ดีเกี่ยวกับสิ่งที่เกิดขึ้นจริง
lhermann

16
นี่คือ overkill - จะเกิดอะไรขึ้นถ้าคุณมีบางสถานะในเซสชันที่คุณต้องการเก็บไว้ ถ้าหากมันเป็นคอนโซลแทนที่จะเป็นเทอร์มินัล X resetเป็นเครื่องมือที่เหมาะสมสำหรับงาน
pericynthion



7

ไม่จำเป็นต้องปิดและเปิดใหม่หรือรีเซ็ตเครื่องของคุณ! แม้ว่าการรีเซ็ตจะใช้งานได้ แต่นี่ไม่ใช่วิธีที่เหมาะสม!

คุณเพียงแค่ต้อง / ชัดเจนลบของคุณขั้วscrollbackบัฟเฟอร์ ในการทำเช่นนั้นเพียงใช้คำสั่งด้านล่าง:

$ echo -ne '\0033\0143'

1
คุณมีคำอธิบายสำหรับปาฏิหาริย์นี้หรือไม่?
Tomasz

1
@ โทมัสใช่เพื่อนแน่นอน เมื่อ-eมีผลบังคับใช้มันจะจดจำลำดับบางอย่างที่คุณสามารถอ่านได้โดยการเรียกใช้man echoหนึ่งในนั้นคือ\0NNNไบต์ที่มีค่าฐานแปด NNN ในความเป็นจริงคุณไม่จำเป็นต้องรีเซ็ตเซสชันเทอร์มินัลของคุณคุณเพียงแค่ต้องเคลียร์บัฟเฟอร์การเลื่อนกลับของคุณ และคำสั่งที่ฉันบอกว่าจะทำงานที่จำเป็น ตัวอย่างเช่นหากคุณใช้ MacOS X จะมีแถบเมนู Edit ในขณะใช้งานเทอร์มินัลและมีตัวเลือก "Clear Scrollback หรือ⌥⌘K"
FarazX

5
ลำดับ\033\143คือ ESC c, รีเซ็ตเป็นสถานะเริ่มต้น : "รีเซ็ต VT100 เป็นสถานะเริ่มต้นเช่นสถานะที่มีหลังจากเปิดเครื่องแล้วสิ่งนี้ยังทำให้การดำเนินการทดสอบตัวเองเมื่อเปิดเครื่องและสัญญาณ INIT H เป็น ถูกกล่าวหาสั้น ๆ "
deltab

1
@deltab ฉันลืมที่จะพูดถึงเกี่ยวกับ ESC ขอบคุณเพื่อนล้าน
FarazX

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