Чому мене іноді в терміналі кілька разів запитують ">"?


19

Добре, коли я запускаю певні команди неправильно, (неправильно написані тощо), термінал виводить так: >замість computername:workingfolder username$, а коли я набираю вводити, йде так:

>

>

>

Це було б, якби я натиснув Enter 3 рази.

Відповіді:


43

> є запитом продовження за замовчуванням. Це те, що ви побачите, якщо те, що ви вводили раніше, має незбалансовані лапки.

Як приклад, введіть одну команду в командному рядку з наступними кількома 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

16

Це станеться, якщо у вас в команді є незакрита цитата. Це щось на кшталт:

$ echo "test here
>
>
...

Ви можете вийти з цього режиму, закривши цитату (написати "або 'або будь-яку відкриту пропозицію). Це також може бути блок з обмеженими дужками, частково повний for-doабо while-doцикл, або певні інші конструкції. Ви також можете натиснути, Ctrl-Cщоб скасувати цю команду (потім натисніть, Upщоб переглянути її).

Іноді це може статися без явної відсутньої цитати, коли параметри або розширення історії відбуваються там, де ви їх не очікували.


Значення >- це ваше PS2("вторинне запит") значення. Ви можете змінити це на щось інше, щоб нагадати, що сталося:

PS2="Unclosed >"

у вашому .bashrcзробить це друком Unclosed >на початку кожного рядка.


7

Окрім інших відповідей, ви також отримуєте підказку продовження, коли ви вводите a \як останній символ у рядку.


5
(Для мене це зазвичай трапляється випадково, оскільки зворотна косої риски лякає близько до клавіші Enter.)
Містер Лістер,

Не на моїй клавіатурі , це не так.
TRiG

@TRiG Ви маєте на увазі, ви часто набираєте # випадково замість \? Право ...
Містер Лістер,

7

Відповідь полягає в цій виразній згадці в Довідковому посібнику Баша :

5.1 Змінні оболонки Борна

[...]

  • PS1: Первинний рядок підказок. Значення за замовчуванням - " \s-\v\$". Див. Розділ Друк підказки , на екрані відображається повний перелік послідовностей втечі, розширених раніше PS1.
  • PS2: Вторинна рядок підказок. Значення за замовчуванням - " >".

Далі :

6.3.3 Інтерактивна поведінка оболонки

  1. Bash розширюється та відображається PS1перед читанням першого рядка команди, а також розгортається та відображається PS2перед читанням другого та наступних рядків багаторядкової команди.

Отже, >підказка з'являється, якщо ви натиснете, Enterі Bash визначить, що команда неповна. Це може бути тому, що:

  • Символ перед новим рядком - це символ \, який трактується як продовження рядка .
  • Ви неповна рядок (Незбіжні лапки або неузгоджений тут-ДОК) або деякі інші невідповідні роздільники, такі як $(), (), ``.
  • Ви розпочали визначення функції, forциклу, whileциклу чи a case.

Якщо ви бачите вторинну підказку через ненавмисну ​​помилку введення, натисніть, ControlCщоб повернутися до первинного запиту.


Ви також отримуєте вторинну підказку під час введення тут-документа. Але це рідше трапиться випадково, ніж інші.
Бармар

6

Оболонка чекає на вас, щоб виконати команду. Можливо, десь є незакрита цитата, або вона вважає, що ви починаєте цикл "за" і чекає, коли користувач закінчить вводити текст

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