เอาล่ะเมื่อฉันรันคำสั่งบางอย่างในทางที่ผิด (สะกดผิด ฯลฯ ) เทอร์มินัลจะแสดงผลลัพธ์ดังนี้: >
แทนที่จะเป็นcomputername:workingfolder username$
และเมื่อฉันพิมพ์ให้ป้อนมันจะเป็นดังนี้:
>
>
>
ถ้าฉันกด Enter 3 ครั้ง
เอาล่ะเมื่อฉันรันคำสั่งบางอย่างในทางที่ผิด (สะกดผิด ฯลฯ ) เทอร์มินัลจะแสดงผลลัพธ์ดังนี้: >
แทนที่จะเป็นcomputername:workingfolder username$
และเมื่อฉันพิมพ์ให้ป้อนมันจะเป็นดังนี้:
>
>
>
ถ้าฉันกด Enter 3 ครั้ง
คำตอบ:
>
เป็นพรอมต์ต่อเนื่องเริ่มต้นนั่นคือสิ่งที่คุณจะเห็นว่าสิ่งที่คุณป้อนก่อนหน้านี้มีเครื่องหมายคำพูดที่ไม่สมดุล
ตัวอย่างเช่นพิมพ์เครื่องหมายคำพูดเดี่ยวบนบรรทัดคำสั่งแล้วตามด้วยenter
คีย์สองสามตัว:
$ '
>
>
>
การแจ้งเตือนความต่อเนื่องจะเกิดขึ้นจนกว่าคุณจะทำเช่นนั้น
(a) กรอกคำสั่งด้วยเครื่องหมายอัญประกาศปิด
หรือ
(b) พิมพ์Ctrl+ Dเพื่อสิ้นสุดอินพุตซึ่ง ณ จุดนั้นเชลล์จะตอบกลับพร้อมกับข้อความแสดงข้อผิดพลาดเกี่ยวกับเครื่องหมายคำพูดที่ไม่สมดุล
หรือ
(c) พิมพ์Ctrl+ Cซึ่งจะยกเลิกคำสั่งที่คุณป้อน
บางครั้งคุณอาจต้องการป้อนสตริงที่มีบรรทัดใหม่ฝังอยู่ คุณสามารถทำได้ดังนี้
$ paragraph='first line
> second line
> third line
> end'
ตอนนี้เมื่อเราแสดงตัวแปรเชลล์คุณจะเห็นว่าพรอมต์หายไป แต่บรรทัดใหม่จะยังคงอยู่:
$ echo "$paragraph"
first line
second line
third line
end
ที่จะเกิดขึ้นหากคุณมีคำพูดที่ไม่เปิดเผยในคำสั่งของคุณ นั่นคือสิ่งที่ชอบ:
$ echo "test here
>
>
...
คุณสามารถออกจากโหมดนั้นได้โดยปิดคำพูด (เขียน"
หรือ'
หรืออ้างถึงสิ่งที่คุณเปิด) มันอาจจะเป็นบล็อกที่มีการคั่นด้วยเครื่องหมายวงเล็บ, การทำให้สมบูรณ์บางส่วนfor-do
หรือการwhile-do
วนซ้ำ, หรือการสร้างอื่น ๆ คุณสามารถกดCtrl-Cเพื่อยกเลิกคำสั่งนี้ (จากนั้นกดUpเพื่อแก้ไข)
บางครั้งสิ่งนี้สามารถเกิดขึ้นได้โดยไม่ต้องใส่เครื่องหมายคำพูดที่ขาดหายไปเมื่อการขยายพารามิเตอร์หรือประวัติเกิดขึ้นในจุดที่คุณไม่ได้คาดหวัง
ค่า>
ของคุณคือPS2
("พรอมต์รอง") คุณสามารถเปลี่ยนสิ่งนั้นเป็นอย่างอื่นเพื่อเตือนคุณว่าเกิดอะไรขึ้น:
PS2="Unclosed >"
ในของคุณ.bashrc
จะทำให้มันพิมพ์Unclosed >
ที่จุดเริ่มต้นของแต่ละบรรทัดแทน
นอกเหนือจากคำตอบอื่น ๆ คุณยังได้รับพรอมต์ต่อเนื่องเมื่อคุณพิมพ์ a \
เป็นอักขระตัวสุดท้ายในบรรทัด
คำตอบอยู่ที่การกล่าวถึงเป็นความลับในคู่มืออ้างอิง Bash :
5.1 ตัวแปรเชลล์เป้าหมาย
[ ... ]
PS1
: สตริงพรอมต์หลัก ค่าเริ่มต้นคือ '\s-\v\$
' โปรดดูที่การพิมพ์พรอมต์สำหรับรายการลำดับการยกเว้นทั้งหมดที่ขยายก่อนที่PS1
จะแสดงขึ้นPS2
: สายอักขระพรอมต์รอง ค่าเริ่มต้นคือ '>
'
… ตามด้วย :
6.3.3 พฤติกรรมเชลล์แบบโต้ตอบ
- Bash ขยายและแสดง
PS1
ก่อนอ่านบรรทัดแรกของคำสั่งและขยายและแสดงPS2
ก่อนอ่านบรรทัดที่สองและบรรทัดถัดไปของคำสั่งหลายบรรทัด
ดังนั้น>
พรอมต์จะปรากฏขึ้นหากคุณกดEnterและ Bash จะพิจารณาว่าคำสั่งนั้นไม่สมบูรณ์ อาจเป็นเพราะ:
\
ซึ่งจะถือว่าเป็นความต่อเนื่องบรรทัด$()
, ,()
``
for
ห่วงเป็นห่วงหรือwhile
case
หากคุณเห็นพรอมต์รองเนื่องจากข้อผิดพลาดในการพิมพ์โดยไม่ได้ตั้งใจให้กดปุ่มControlCเพื่อกลับไปที่พรอมต์หลัก
เชลล์รอให้คุณทำคำสั่งให้สมบูรณ์ อาจจะมีการเสนอราคาที่ไม่มีการปิดผนึกบางแห่งหรือคิดว่าคุณกำลังเริ่มการวน "สำหรับ" และรอให้ผู้ใช้พิมพ์เสร็จ