Когда я нажимаю обратную косую черту \, мне дают >
(больше чем) символ. Что это значит?
Когда я нажимаю обратную косую черту \, мне дают >
(больше чем) символ. Что это значит?
Ответы:
Всякий раз, когда вы используете командную строку, может быть случай, когда вам нужно выполнить очень длинную команду. Итак, вы хотите разделить команду на несколько строк для лучшей читаемости и понимания. Но если вы используете символ новой строки, который набирается Enter, оболочка будет думать, что это новая команда. Таким образом, вы используете \
символ новой строки.
По сути, команды или скрипты bash «интерпретируются», то есть выполняются построчно. Каждая новая строка означает начало новой команды. В терминале, когда вы нажимаете Enter, вы получаете запрос на запуск новой команды. Итак, новая строка должна быть "экранирована". Ввод с \
последующим Enterпозволяет разделить текущую команду на несколько строк, чтобы оболочка не думала, что это новая команда, а является продолжением предыдущей команды.
>
это не что иное, как подсказка для следующей строки вводимой команды.
Например:
если мы хотим установить несколько пакетов, команда будет выглядеть так:
$ sudo apt install [package1] [package2] [package3] ...
Но иногда это мешает команде. Таким образом, мы можем использовать с \
последующим Enter(символ новой строки)
$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
$PS1
и $PS2
переменным. См. Справочную страницу bash, чтобы узнать формат, и используйте echo "'$PS2'"
для просмотра текущих настроек.
Символ обратной косой черты ( \
) используется в качестве escape-символа в оболочке. Если вы используете его как последний символ в строке, он экранирует символ новой строки, поэтому вы можете продолжить свою команду на следующей строке вместо завершения. На это указывает >
подсказка в Bash.
Пример:
$ echo A\
> B
AB
$
Чтобы вставить литерал \
в вашу команду, вы должны экранировать его, используя другую обратную косую черту:
$ echo \\
\
$
[добавляя (слишком длинный / сложный) ответ, так как другие 2 не упоминают, как выглядит «>» ... т.е. не упоминают PS2]
Введено: \Enter: \говорит оболочку , чтобы только выходEnter как literral характер , а не интерпретировать его как обычно (Поэтому оболочка «переходит к следующей строке» вместо завершения текущей командной строки и его интерпретации Если вы не в некоторых. другие конструкции, такие как heredoc, цикл for и т. д.).
Таким образом, ваш терминал интерпретируется \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 / some просто сдвигает 2 пробела вправо, и «>» не было вставлено, так что вы можете спокойно скопировать / вставить эту 2-строчную команду.
PS2 также используется в циклах «for», «while» и т. Д., И его определение как «», на мой взгляд, лучше и в тех.