Термінал показує> після введення \


26

Коли я натискаю зворотну косу рису \, мені видається >символ (більший, ніж). Що це означає?


4
Це вказівка ​​на продовження рядка.
RobotHumans

Відповіді:


35

Кожного разу, коли ви використовуєте командний рядок, може виникнути екземпляр, коли вам потрібно запустити дуже довгу команду. Отже, ви хочете розділити команду на кілька рядків для кращої читабельності та розуміння. Але якщо ви використовуєте новий символ рядка, який набирається Enter, оболонка подумає, що це нова команда. Отже, ви використовуєте \наступний символ нового рядка.

В основному команди або скрипти bash "інтерпретуються", тобто виконуються рядок за рядком. Кожен новий рядок означає початок нової команди. У терміналі, коли ви натискаєте 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 характер , а не інтерпретувати його як зазвичай (Тому оболонка «переходить до наступного рядка» замість завершення поточної командного рядка і його інтерпретації Якщо ви не в деяких. інші конструкції, такі як гередок, цикл і т.д.).

Тому ваш термінал інтерпретується \Enterяк "перехід до наступного рядка" (не починаючи інтерпретувати команду), і, таким чином, термінал дозволяє вводити другий рядок багаторядкової команди, а для того, щоб зробити його більш видимим, відображає $PS2вміст ( називається підказка PS2 ) у кожному наступному рядку.

PS2 змінні звичайно визначаємося за замовчуванням як: PS2="> "і ви можете для Exemple редагувати свої ~ / .bashrc , щоб перевизначити його , як ви хочете (беручи до уваги , що він повинен, їм, уникати містить небезпечні символів, таких як >або ;, і повинен допомогти вам або ясно бачити , що це багаторядкові команди , але відключити його многострочное зміст (наприклад: 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 рядки в інший термінал, їх дія буде зовсім іншою: замість того, щоб стискати в 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 пробіли праворуч, і жодного ">" не вставлено, тож ви можете сміливо скопіювати / вставити цю дворядкову команду.

PS2 також використовується в циклі "for" "while" і т.д. і, якщо це визначено як "", мені теж краще в цих.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.