Терминальные шоу> после ввода \

Когда я нажимаю обратную косую черту \, мне дают a > (больше, чем) символ. Что это означает?

26
задан 8 January 2019 в 05:41

3 ответа

Каждый раз, когда Вы используете командную строку, мог бы быть экземпляр, когда необходимо выполнить команду, которая очень длинна. Так, Вы хотите разделить команду на несколько строк для лучшей удобочитаемости и понимания. Но если Вы используете символ новой строки, который вводится , Входят , оболочка будет думать, что это - новая команда. Таким образом, Вы используете \ сопровождаемый символом новой строки.

В основном, команды или сценарии удара "интерпретируются", т.е. выполняются линию за линией. Каждая новая строка означает запуск новой команды. В терминале, когда Вы нажимаете , Входят , Вы заставляете подсказку выполнять новую команду. Так, новой строки нужно "оставить". Ввод \ сопровождаемый Входит позволяет Вам разделять текущую команду на несколько строк, таким образом, оболочка не думает, что это - новая команда, но продолжение предыдущей команды.

> только подсказка для следующей строки вводимой команды.

, Например:
, Если мы хотим установить несколько пакетов, команда будет похожа

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

, Но иногда, который делает команду нарушенной. Таким образом, мы можем использовать \ сопровождаемый , Входят (символ новой строки)

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
35
ответ дан 23 November 2019 в 01:07

Символ обратной косой черты (\) используется в качестве символ ESC в оболочке. Если Вы используете его в качестве последнего знака на строке, это выходит из новой строки, таким образом, можно продолжить команду на следующей строке вместо того, чтобы закончить его. Это обозначается эти > подсказка в Bash.

Пример:

$ echo A\
> B
AB
$

Для помещения литерала \ в команду необходимо выйти из него с помощью другой обратной косой черты:

$ echo \\
\
$
14
ответ дан 23 November 2019 в 01:07

[при добавлении (слишком длинный / комплекс) ответ как другие 2 не упоминает, как"> "появляется... т.е., не упоминайте PS2]

Вы ввели: \Enter: \говорит оболочке, чтобы просто произвести Введение как литеральный символ вместо того, чтобы интерпретировать его, как обычно (Поэтому, оболочка "переходит к следующей строке" вместо того, чтобы завершить текущую командную строку и интерпретировать ее. Если Вы не находитесь в некоторых других конструкциях, таких как heredoc, для цикла, и т.д.).

Ваш терминал поэтому интерпретирует \Enter как: "перейдите к следующей строке" (не начиная интерпретировать команду), и таким образом терминал теперь позволяет Вам ввести 2-ю строку многострочной команды и сделать ее более видимыми дисплеями $PS2 содержание (названный подсказкой PS2) на каждой последующей строке.

Переменная PS2 обычно определяется по умолчанию как: PS2="> " и Вы можете для exemple редактировать свой ~/.bashrc для переопределения его, поскольку Вы желаете (учет, что он должен, imo, постараться не содержать опасные символы, такой как > или ;, и должен помочь Вам, любой ясно видит, что это - мультилиния команды, но отключите, это - многострочное содержание (исключая: PS2="#cont#") или позвольте Вам легко скопировать/вставить их с как можно меньшим влиянием на его строки (исключая: PS2=" ")

Который, между прочим, является imo плохое значение по умолчанию, поскольку он мог очень хорошо привести удалять некоторые важные двоичные команды в некоторых случаях.

Можно переопределить PS2, чтобы быть чем-то еще (мне нравится: PS2 ="", для exemple) так, чтобы многострочные команды могли легко копироваться/вставляться, не боясь следующего:

Для exemple скажем, у Вас есть команда, которая начинает быть довольно долгой (и может свернуться на Вашем экране, если Ваш терминал не достаточно широк):

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)!

Избегать этих проблем (и многие другие): Вы могли для exemple определять: 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 пробела направо, и не">" были вставлены, таким образом, Вы можете безопасно скопировать/вставить эта команда с 2 строками.

PS2 также используется в "для" того, "в то время как" и т.д. циклы и определение его как "", мне, лучше в тех также.

7
ответ дан 23 November 2019 в 01:07

Другие вопросы по тегам:

Похожие вопросы: