เทอร์มินัลแสดง> หลังจากป้อน \


26

เมื่อฉันกดแบ็กสแลช\ฉันได้รับสัญลักษณ์>(มากกว่า) สิ่งนี้หมายความว่า?


4
มันเป็นตัวบ่งชี้ความต่อเนื่องของเส้น
RobotHumans

คำตอบ:


35

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

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

> ไม่มีอะไรนอกจากพรอมต์สำหรับบรรทัดถัดไปของคำสั่งที่กำลังถูกป้อน

ตัวอย่างเช่น:
หากเราต้องการติดตั้งหลายแพ็คเกจคำสั่งจะเป็นเช่นนั้น

$ sudo apt install [package1] [package2] [package3] ...

แต่บางครั้งนั่นทำให้คำสั่งรกรุงรัง ดังนั้นเราสามารถใช้\ตามด้วยEnter(อักขระขึ้นบรรทัดใหม่)

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...

4
@Curiouskangaroo BTW คุณสามารถควบคุมวิธีการทำงานของคำสั่งและความต่อเนื่องของบรรทัดใหม่ได้โดยการตั้งค่าเป็น$PS1และ$PS2ตัวแปร ดูหน้า bash man เพื่อเรียนรู้รูปแบบและใช้echo "'$PS2'"เพื่อดูการตั้งค่าปัจจุบัน
jpaugh

14

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

ตัวอย่าง:

$ echo A\
> B
AB
$

ในการใส่ตัวอักษร\ลงในคำสั่งของคุณคุณต้องหลบหนีโดยใช้เครื่องหมายแบ็กสแลชอื่น:

$ echo \\
\
$

7

[เพิ่มคำตอบ (ยาวเกินไป / ซับซ้อน) เนื่องจากอีก 2 คำตอบไม่ได้พูดว่า ">" ปรากฏขึ้นอย่างไร ... นั่นคือไม่ต้องพูดถึง PS2]

คุณพิมพ์: \Enterคือ\พูดกับเปลือกจะเพียงแค่การส่งออกEnterเป็นตัวอักษร literral แทนการแปลความหมายของมันตามปกติ (ดังนั้นเปลือก "ไปยังบรรทัดถัดไป" แทนที่จะยกเลิกบรรทัดคำสั่งในปัจจุบันและการตีความมันจนกว่าคุณจะได้ในบาง. โครงสร้างอื่น ๆ เช่น heredoc, for for loop, ฯลฯ )

เทอร์มินัลของคุณตีความ\Enterเป็น: "ไปที่บรรทัดถัดไป" (โดยไม่ต้องเริ่มตีความคำสั่ง) ดังนั้นเทอร์มินัลจะให้คุณป้อนบรรทัดที่ 2 ของคำสั่งหลายบรรทัดและทำให้มองเห็น$PS2เนื้อหาได้ง่ายขึ้น ( เรียกว่าพรอมต์ PS2 ) ในแต่ละบรรทัดต่อมา

โดยปกติแล้วตัวแปรPS2จะถูกกำหนดโดยค่าเริ่มต้นเป็น: PS2="> "และคุณสามารถ exemple แก้ไข ~ / .bashrc ของคุณเพื่อกำหนดใหม่ได้ตามที่คุณต้องการ (โดยคำนึงถึงว่าควร imo หลีกเลี่ยงการมีตัวอักษรอันตรายเช่น>หรือ;และควรช่วยคุณ อย่างใดอย่างหนึ่งอย่างชัดเจนเห็นมันเป็นคำสั่งหลาย แต่ปิดการใช้งานเนื้อหาหลาย (เช่นPS2="#cont#") หรือช่วยให้คุณสามารถคัดลอก / วางพวกเขามีผลกระทบเพียงเล็กน้อยต่อเส้นที่เป็นไปได้ (เช่น: PS2=" ")

ซึ่งโดยวิธีการนั้นเป็นค่าเริ่มต้นที่ไม่ดีเพราะมันอาจนำไปสู่คำสั่งลบไบนารีที่สำคัญบางคำสั่งในบางกรณี

คุณสามารถกำหนด PS2 ให้เป็นอย่างอื่นได้ (เช่น: PS2 = "", สำหรับตัวอย่าง) เพื่อให้คำสั่งหลายบรรทัดสามารถคัดลอก / วางได้อย่างง่ายดายโดยไม่ต้องกลัวสิ่งต่อไปนี้:

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

grep -i "something"  /some/file  /another/file /3rd/file /etc/someimportantfile 

หากคำสั่งยาวเกินไป (และล้อมรอบ) คุณอาจต้องการแยกคำสั่งให้มองเห็นเป็น 2 บรรทัดโดยเลือกตำแหน่ง (เมื่อ) ที่คุณต้องการไปยังบรรทัดถัดไปโดยการแทรก: \Enterที่จุดที่เหมาะสม:

grep -i "something"  /some/file  /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !

การใช้ค่าเริ่มต้น PS2 เชลล์เพิ่ม ">" ก่อน "/ etc / someimportantfile" .. ดังนั้นหากคุณคัดลอก / วาง 2 บรรทัดเหล่านั้นในเทอร์มินัลอื่นการกระทำของพวกเขาจะแตกต่างกันโดยสิ้นเชิง: แทนที่จะ grepping เป็น 4 ไฟล์ grep คือ การเข้าสู่ 3 ไฟล์แรกเท่านั้นและเอาต์พุต grep จะแทนที่เนื้อหาของไฟล์ลำดับที่ 4 (/ etc / someimportantfile)!

เพื่อหลีกเลี่ยงปัญหาเหล่านี้ (และอื่น ๆ อีกมากมาย): คุณสามารถกำหนดตัวอย่างได้อย่างยอดเยี่ยม: PS2=" "เพื่อทำให้คำสั่งหลายบรรทัดสะอาดและง่ายต่อการคัดลอก / วาง:

grep -i "something"  /some/file  /another/file /3rd/file \
  /etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!

สังเกตว่าเวลา / bin / somecommand นี้เป็นเพียงแค่ตัวเว้นวรรค 2 ตัวทางด้านขวาและไม่ได้ใส่ ">" ดังนั้นคุณสามารถคัดลอก / วางคำสั่ง 2 บรรทัดนี้

PS2 ยังใช้ใน "for" "ในขณะที่" ลูป ฯลฯ และการกำหนดเป็น "" คือสำหรับฉัน

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