Tại sao đôi khi tôi lại liên tục bị nhắc nhở với dòng >> trong thiết bị đầu cuối?


19

Được rồi, khi tôi chạy một số lệnh sai cách, (sai chính tả, v.v.) Thiết bị đầu cuối xuất ra cái này: >thay vì computername:workingfolder username$và khi tôi nhập enter, nó sẽ như sau:

>

>

>

Đó sẽ là nếu tôi nhấn enter 3 lần.

Câu trả lời:


43

> là lời nhắc tiếp tục mặc định. Đó là những gì bạn sẽ thấy nếu những gì bạn đã nhập trước đó có dấu ngoặc kép không cân bằng.

Ví dụ: nhập một trích dẫn trên dòng lệnh theo sau là một vài enterphím:

$ '
> 
> 
> 

Các lời nhắc tiếp tục sẽ xảy ra cho đến khi bạn

  • (a) hoàn thành lệnh với dấu ngoặc kép đóng

    hoặc là

  • (b) gõ Ctrl+ Dđể kết thúc đầu vào, tại đó, vỏ sẽ phản hồi với thông báo lỗi về các trích dẫn không cân bằng,

    hoặc là

  • (c) loại Ctrl+ Csẽ hủy bỏ lệnh mà bạn đang nhập.

Làm thế nào điều này là hữu ích

Đôi khi, bạn có thể muốn nhập một chuỗi chứa các dòng mới được nhúng. Bạn có thể làm như sau:

$ paragraph='first line
> second line
> third line
> end'

Bây giờ, khi chúng tôi hiển thị biến shell đó, bạn có thể thấy rằng các lời nhắc đã biến mất nhưng các dòng mới được giữ lại:

$ echo "$paragraph"
first line
second line
third line
end

16

Điều đó sẽ xảy ra nếu bạn có một trích dẫn không được tiết lộ trong lệnh của bạn. Đó là một cái gì đó như:

$ echo "test here
>
>
...

Bạn có thể thoát khỏi chế độ đó bằng cách đóng quote (ghi một "hoặc ', hoặc bất cứ quote mở của bạn là). Nó cũng có thể là một khối được phân định bằng dấu ngoặc, một phần hoàn chỉnh for-dohoặc while-dovòng lặp hoặc một số cấu trúc khác. Bạn cũng có thể nhấn Ctrl-Cđể hủy lệnh này (sau đó nhấn Upđể sửa lại).

Điều này đôi khi có thể xảy ra mà không có trích dẫn thiếu rõ ràng khi mở rộng tham số hoặc lịch sử xảy ra khi bạn không mong đợi chúng.


Giá trị >của bạn PS2("dấu nhắc phụ"). Bạn có thể thay đổi điều đó thành điều khác để nhắc nhở bạn những gì đã xảy ra:

PS2="Unclosed >"

thay vào đó, bạn .bashrcsẽ làm cho nó được in Unclosed >ở đầu mỗi dòng thay thế.


7

Ngoài các câu trả lời khác, bạn cũng nhận được lời nhắc tiếp tục khi bạn nhập a \làm ký tự cuối cùng trên một dòng.


5
(Đối với tôi, điều này thường xảy ra một cách tình cờ, vì dấu gạch chéo ngược rất gần với phím Enter.)
Mr Lister

Không phải trên bàn phím của tôi , nó không phải là.
TRiG

@TRiG Ý bạn là, bạn thường gõ # một cách tình cờ thay vì \? Phải ...
Ông Lister

7

Câu trả lời nằm trong đề cập khó hiểu này trong Hướng dẫn tham khảo Bash :

5.1 Biến Bourne Shell

[...]

  • PS1: Chuỗi dấu nhắc chính. Giá trị mặc định là ' \s-\v\$'. Xem phần In Nhắc , để biết danh sách đầy đủ các chuỗi thoát được mở rộng trước khi PS1được hiển thị.
  • PS2: Chuỗi dấu nhắc phụ. Giá trị mặc định là ' >'.

... tiếp theo :

6.3.3 Hành vi vỏ tương tác

  1. Bash mở rộng và hiển thị PS1trước khi đọc dòng đầu tiên của lệnh, và mở rộng và hiển thị PS2trước khi đọc dòng thứ hai và tiếp theo của lệnh đa dòng.

Vì vậy, >lời nhắc xuất hiện nếu bạn nhấn Entervà Bash xác định rằng lệnh không đầy đủ. Đó có thể là vì:

  • Ký tự trước dòng mới là a \, được coi là tiếp tục dòng .
  • Bạn có một chuỗi đầy đủ (mismatched dấu ngoặc kép hoặc unterminated đây-doc) hoặc một số delimiters không hạnh phúc khác, chẳng hạn như $(), (), ``.
  • Bạn đã bắt đầu một định nghĩa hàm, một forvòng lặp, một whilevòng lặp hoặc một case.

Nếu bạn đang thấy dấu nhắc phụ do lỗi gõ không chủ ý, hãy nhấn ControlCđể quay lại dấu nhắc chính.


Bạn cũng nhận được lời nhắc phụ khi bạn nhập vào tài liệu ở đây. Nhưng điều này ít có khả năng xảy ra do tai nạn hơn những người khác.
Barmar

6

Vỏ chờ bạn hoàn thành lệnh. Có thể có một trích dẫn chưa được tiết lộ ở đâu đó hoặc nó nghĩ rằng bạn đang bắt đầu một vòng lặp "cho" và chờ người dùng nhập xong

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.