Bí ẩn> dấu nhắc từ mất dấu phải


2

Nếu tôi gõ chẳng hạn

grep 'needle
>

Tôi được gửi đến một >dấu nhắc bí ẩn từ đó ctrl- C(hoặc khởi động lại thiết bị đầu cuối) dường như là lối thoát duy nhất.

  1. Lời nhắc này là gì?
  2. Tại sao nó không chấm dứt khi tôi nhập ctrl- Z?
  3. Tại sao nó không được thiết kế tốt hơn để phát hiện người mới bị mắc kẹt? Chắc chắn, có thể trong một số trường hợp cạnh bị lố bịch, sẽ có lý do để mở >lời nhắc này và sau đó nhập một cái gì đó như thế "quit\nexit\nhelp\nCTRL-Z\nlogout\n", nhưng nếu người dùng bắt đầu nhập những thứ đó, Ubuntu ít nhất nên đưa ra một thông báo phản hồi hữu ích (ví dụ: "Bạn có đang cố gắng không thoát khỏi lời nhắc này? Nếu vậy hãy sử dụng CTRL- C. Nếu không, hãy bỏ qua thông báo này. ") sẽ không can thiệp vào bất kỳ mục đích kỳ lạ nào mà lời nhắc đó phục vụ.

Câu trả lời:


2

Điều này là do bạn đã mở một trích dẫn ( "hoặc ') để shell giả định rằng lệnh tiếp tục, những gì được biểu thị bởi >ký tự này . Vì vậy, cho đến khi trích dẫn kết thúc, bạn sẽ nhận được >lời nhắc để hoàn thành lệnh bắt đầu.

Đây là khi bạn muốn lặp lại một cái gì đó với dòng mới trong đó, ví dụ:

user@host:~$ echo "this
> is a text
> with multiple
> newlines"

đầu ra:

this
is a text
with multiple
newlines

Để hủy bỏ bạn cũng có thể nhấn Ctrl+ c.


1

Không có gì bí ẩn. Dấu nhắc đó ( >) đang gợi ý cho bạn rằng shell đang chờ trích dẫn thứ hai 'và tên tệp để hoàn thành lệnh của bạn. Nếu bạn muốn tìm kiếm 'needlethì hãy sử dụng:

grep \'needle filename

Control+ Zđược sử dụng để tạm ngừng công việc, nhưng bạn không có công việc nào bắt đầu chỉ bằng cách nhập grep 'needle.

Và, tại điểm thứ ba, tôi sẽ nói rằng điều này sẽ nghe có vẻ vô lý đối với người dùng thực sự làm việc với thiết bị đầu cuối. Thêm vào đó, làm thế nào để bạn biết rằng thiết bị đầu cuối có thể phát hiện nếu ai đó là người mới hay không? Và nếu ai đó thực sự muốn nhập các chuỗi đó: "thoát, thoát, trợ giúp, đăng xuất" thì sao?

Xem thêm:


À tôi nghi ngờ rất nhiều nhưng khi tôi làm $ grep 'kim>' tôi được chuyển sang một dấu nhắc bí ẩn khác với NO> hoặc $ hoặc bất cứ điều gì. Điều này là tất nhiên bởi vì đó là nơi grep 'kim' sẽ gửi cho tôi và điều tôi thực sự cần làm là grep 'kim' * (tại sao grep được thiết kế quá tệ theo nghĩa đó? Nhưng đó là vấn đề khác cho một bài đăng khác)
Ẩn danh

1
Khi bạn gõ grep 'needle >'lệnh grep chờ đầu vào từ stdin. Vì vậy, tất cả mọi thứ bạn gõ. Khi bạn gõ needle >sau đó, nó sẽ được grepping và in ... Có thể rất lạ đối với người mới bắt đầu shell =)
hỗn loạn

@Anonymous Xem thêm man grep. Lần này, khi bạn sử dụng grep 'needle >'loại `blabla kim> blabla` để xem điều gì đang xảy ra. Và lần này, vâng, bạn có một công việc có thể dừng lại, vì vậy bạn có thể sử dụng Ctrl + Z. Xem thêm các chỉnh sửa mới của tôi tại câu trả lời.
Radu Rădeanu

Cảm ơn tất cả sự giúp đỡ chiếu sáng. Vì vậy, là một chủ đề phụ, tại sao dấu nhắc> bỏ qua CTRL-Z? Tôi gặp khó khăn khi hình dung bất kỳ lý do tại sao nó dường như chặn tín hiệu và bỏ qua nó. Tại sao người dùng khác lại nhấn CTRL-Z nếu không giết bất cứ điều gì đang xảy ra (dấu nhắc>)?
Ẩn danh

@Anonymous Bạn đã xem qua: Có gì khác nhau giữa Ctrl + Z và Ctrl + C trong dòng lệnh Unix? . Vẫn chưa rõ ràng với bạn rằng Ctrl + Z không giết bất cứ thứ gì? Nó chỉ đình chỉ một quá trình để nối lại sau này . Chỉ Ctrl + C có thể giết bất cứ điều gì bạn đang làm trong thiết bị đầu cuối.
Radu Rădeanu

0

Dấu nhắc chỉ là đầu vào tiêu chuẩn. 'ký tự được hiểu là' bắt đầu một chuỗi 'để nó chấp nhận đóng'. khi bạn nhấn return trước khi đóng ', nó được hiểu là một dòng mới. bạn có thể tiếp tục viết những gì bạn muốn. Khi bạn nhập một 'và nhấn enter, nó sẽ nhận được toàn bộ chuỗi bạn đã viết

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.