Hiển thị thiết bị đầu cuối> sau khi vào \


Câu trả lời:


35

Bất cứ khi nào bạn sử dụng dòng lệnh, có thể có một trường hợp khi bạn cần chạy một lệnh rất dài. Vì vậy, bạn muốn chia lệnh thành nhiều dòng để dễ đọc và hiểu hơn. Nhưng nếu bạn sử dụng ký tự dòng mới được gõ bởi Enter, shell sẽ nghĩ rằng đó là một lệnh mới. Vì vậy, bạn sử dụng \theo sau bởi các ký tự dòng mới.

Về cơ bản, các lệnh hoặc tập lệnh bash được "diễn giải", tức là được thực thi theo từng dòng. Mỗi dòng mới có nghĩa là bắt đầu một lệnh mới. Trong thiết bị đầu cuối, khi bạn nhấn Enter, bạn nhận được lời nhắc để chạy lệnh mới. Vì vậy, một dòng mới cần phải được "thoát". Gõ \theo sau Entercho phép bạn chia lệnh hiện tại thành nhiều dòng để shell không nghĩ rằng đó là lệnh mới nhưng tiếp tục lệnh trước đó.

> không có gì ngoài một dấu nhắc cho dòng tiếp theo của lệnh được nhập.

Ví dụ:
Nếu chúng ta muốn cài đặt nhiều gói, lệnh sẽ giống như

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

Nhưng đôi khi, điều đó làm cho lệnh lộn xộn. Vì vậy, chúng ta có thể sử dụng \theo sau Enter(ký tự dòng mới)

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

4
@Cpered Khangaroo BTW, bạn có thể kiểm soát cách nhắc lệnh tiếp tục dònglệnh mới hoạt động, bằng cách đặt giá trị cho $PS1$PS2các biến. Xem trang bash man để tìm hiểu định dạng và sử dụng echo "'$PS2'"để xem cài đặt hiện tại.
jpaugh

14

Ký tự dấu gạch chéo ngược ( \) được sử dụng làm ký tự thoát trong trình bao. Nếu bạn sử dụng nó làm ký tự cuối cùng trên dòng, nó sẽ thoát khỏi dòng mới, vì vậy bạn có thể tiếp tục lệnh của mình trên dòng tiếp theo thay vì hoàn thành nó. Điều này được chỉ định bởi >dấu nhắc trong Bash.

Thí dụ:

$ echo A\
> B
AB
$

Để đặt một chữ theo \lệnh của bạn, bạn phải thoát nó bằng cách sử dụng dấu gạch chéo ngược khác:

$ echo \\
\
$

7

[thêm câu trả lời (quá dài / phức tạp) khi 2 người kia không đề cập đến cách ">" xuất hiện ... tức là không đề cập đến PS2]

Bạn gõ: \Enter: các \nói với vỏ để chỉ ra sự Enternhư một nhân vật literral thay vì giải thích nó như bình thường (Vì vậy vỏ "đi vào dòng tiếp theo" thay vì chấm dứt dòng lệnh hiện hành và giải thích nó Trừ khi bạn đang ở trong một số. các cấu trúc khác như di truyền, vòng lặp for, v.v.).

Do đó, thiết bị đầu cuối của bạn diễn giải \Enterlà: "đi đến dòng tiếp theo" (không bắt đầu diễn giải lệnh) và do đó, thiết bị đầu cuối hiện đang cho phép bạn nhập dòng thứ 2 của lệnh nhiều dòng và để hiển thị rõ hơn $PS2nội dung ( được gọi là dấu nhắc PS2 ) trên mỗi dòng tiếp theo.

Biến PS2 thường được xác định theo mặc định là: PS2="> "và bạn có thể chỉnh sửa ví dụ ~ / .bashrc để xác định lại nó theo ý muốn (cân nhắc rằng nó nên, imo, tránh chứa các ký tự nguy hiểm, như >hoặc ;, và sẽ giúp bạn hoặc thấy rõ đó là một lệnh đa dòng nhưng vô hiệu hóa nội dung đa dòng của nó (ví dụ PS2="#cont#":) hoặc cho phép bạn dễ dàng sao chép / dán chúng với ít tác động nhất đến các dòng của nó (ví dụ PS2=" ":)

Nhân tiện, đây là một mặc định xấu, vì nó rất có thể khiến người ta xóa một số lệnh nhị phân quan trọng trong một số trường hợp.

Bạn có thể định nghĩa lại PS2 thành một cái gì đó khác (tôi thích: PS2 = "", ví dụ) để các lệnh đa dòng có thể dễ dàng sao chép / dán mà không sợ những điều sau:

Ví dụ, giả sử bạn có một lệnh bắt đầu khá dài (và có thể gập trên màn hình nếu thiết bị đầu cuối của bạn không đủ rộng):

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

Nếu lệnh trông quá dài (và bao quanh), bạn có thể muốn tách nó thành 2 dòng, bằng cách chọn vị trí (khi) bạn muốn đến dòng tiếp theo bằng cách chèn: \Entertại vị trí thích hợp:

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

Sử dụng PS2 mặc định, shell đã thêm ">" trước "/ etc / someimportantfile" .. vì vậy nếu bạn sao chép / dán 2 dòng đó vào một thiết bị đầu cuối khác, hành động của chúng sẽ hoàn toàn khác: thay vì gre vào 4 tệp, grep là chỉ đi vào 3 tệp đầu tiên và đầu ra grep thay thế nội dung của tệp thứ 4 (/ etc / someimportantfile)!

Để tránh những vấn đề này (và nhiều vấn đề khác): bạn có thể xác định ví dụ: PS2=" "để làm cho các lệnh đa dòng sạch hơn và dễ dàng hơn để sao chép / dán:

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

Lưu ý cách thời gian / bin / somecommand này chỉ đơn giản là chuyển 2 khoảng trắng sang phải và không có ">" nào được chèn, do đó bạn có thể sao chép / dán lệnh 2 dòng này một cách an toàn.

PS2 cũng được sử dụng trong các vòng lặp "for" "while", và với nó được định nghĩa là "", đối với tôi, tốt hơn trong những vòng lặp đó.

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.