Когда я нажимаю обратную косую черту \, мне дают >
(больше чем) символ. Что это значит?
command-line
bash
Curiouskangaroo
источник
источник
Ответы:
Всякий раз, когда вы используете командную строку, может быть случай, когда вам нужно выполнить очень длинную команду. Итак, вы хотите разделить команду на несколько строк для лучшей читаемости и понимания. Но если вы используете символ новой строки, который набирается Enter, оболочка будет думать, что это новая команда. Таким образом, вы используете
\
символ новой строки.По сути, команды или скрипты bash «интерпретируются», то есть выполняются построчно. Каждая новая строка означает начало новой команды. В терминале, когда вы нажимаете Enter, вы получаете запрос на запуск новой команды. Итак, новая строка должна быть "экранирована". Ввод с
\
последующим Enterпозволяет разделить текущую команду на несколько строк, чтобы оболочка не думала, что это новая команда, а является продолжением предыдущей команды.>
это не что иное, как подсказка для следующей строки вводимой команды.Например:
если мы хотим установить несколько пакетов, команда будет выглядеть так:
Но иногда это мешает команде. Таким образом, мы можем использовать с
\
последующим Enter(символ новой строки)источник
$PS1
и$PS2
переменным. См. Справочную страницу bash, чтобы узнать формат, и используйтеecho "'$PS2'"
для просмотра текущих настроек.Символ обратной косой черты (
\
) используется в качестве escape-символа в оболочке. Если вы используете его как последний символ в строке, он экранирует символ новой строки, поэтому вы можете продолжить свою команду на следующей строке вместо завершения. На это указывает>
подсказка в Bash.Пример:
Чтобы вставить литерал
\
в вашу команду, вы должны экранировать его, используя другую обратную косую черту:источник
[добавляя (слишком длинный / сложный) ответ, так как другие 2 не упоминают, как выглядит «>» ... т.е. не упоминают PS2]
Введено: \Enter: \говорит оболочку , чтобы только выходEnter как literral характер , а не интерпретировать его как обычно (Поэтому оболочка «переходит к следующей строке» вместо завершения текущей командной строки и его интерпретации Если вы не в некоторых. другие конструкции, такие как heredoc, цикл for и т. д.).
Таким образом, ваш терминал интерпретируется \Enterкак: «перейти к следующей строке» (без начала интерпретации команды), и, таким образом, терминал теперь позволяет вам вводить вторую строку многострочной команды и, чтобы сделать ее более видимой, отображает
$PS2
содержимое ( называется PS2 подсказка ) на каждой последующей строке.PS2 переменные обычно определяемся по умолчанию как:
PS2="> "
и вы можете для Exemple редактировать свои ~ / .bashrc , чтобы переопределить его , как вы хотите (принимая во внимание , что он должен, им, избегать содержащий опасные символов, таких как>
или;
, и должен помочь вам либо ясно видеть , что это многострочные команды , но отключить его многострочное содержание (например:PS2="#cont#"
) или позволяете легко копировать / вставлять их с минимальным воздействием на его линии , как это возможно (например:PS2=" "
)Что, кстати, по моему мнению, плохое значение по умолчанию, поскольку в некоторых случаях это может привести к удалению некоторых важных двоичных команд.
Вы можете переопределить PS2 как нечто другое (мне нравится: PS2 = "", например), чтобы многострочные команды можно было легко копировать / вставлять, не опасаясь следующего:
Например, скажем, у вас есть команда, которая начинает быть очень длинной (и может сворачиваться на вашем экране, если ваш терминал недостаточно широк):
Если команда выглядит слишком длинной (и оборачивается), вы можете визуально разделить ее на 2 строки, выбрав, где (когда) вы хотите перейти к следующей строке, вставив: \Enterв соответствующем месте:
Используя PS2 по умолчанию, оболочка добавила «>» перед «/ etc / someimportantfile» .. поэтому, если вы скопируете / вставите эти 2 строки в другой терминал, их действие будет совершенно другим: вместо поиска в 4 файлах grep только входя в первые 3 файла, и вывод grep заменяет содержимое 4-го файла (/ etc / someimportantfile)!
Чтобы избежать этих проблем (и многих других): вы можете, например, определить:
PS2=" "
сделать многострочные команды более понятными и их легче копировать / вставлять:Обратите внимание, что эта команда время / bin / some просто сдвигает 2 пробела вправо, и «>» не было вставлено, так что вы можете спокойно скопировать / вставить эту 2-строчную команду.
PS2 также используется в циклах «for», «while» и т. Д., И его определение как «», на мой взгляд, лучше и в тех.
источник