Вопрос или проблема
Итак, я постоянно ошибаюсь, неправильно вводя свои команды grep.
Я собираюсь ввести grep searchstring *
. Однако я часто забываю поставить *, и в итоге нажимаю Enter после ввода grep searchstring
.
Это отправляет мой командный интерфейс в замороженное состояние >, из которого я не могу выбраться.
Независимо от того, что я пытаюсь ввести после этого, я не могу выбраться из > обреченности. Мне приходится закрывать свою сессию и перезапускать её, теряя весь свой прогресс.
В чем секрет того, чтобы избежать этой проблемы?
Я пробовал ctrl + z, ctrl + x, ctrl + d, esc, другую *, ‘, “, ;, в общем, всё, что могу придумать, не знаю, как исправить это после того, как я “испорчу” свой grep.
Что он ожидает, когда я забываю указать, где искать, и как я могу это исправить?
Для большей ясности:
Обычно, когда вы работаете в командной строке, у вас появляется командный приглашение. Например, сейчас моё командное приглашение – bash-5.2$. Так что мой экран выглядит так:
bash-5.2$ pwd
/bin/bash
bash-5.2$ ls
file1.txt file2.txt
bash-5.2$ grep searchstring *
file1.txt:searchstring
file2.txt:searchstring
bash-5-2$
Указание bash-5.2$
означает, что приглашение готово к новой команде. Вышеуказанный grep был введен правильно, с *, и поэтому он вывел результат и вернулся к обычному приглашению.
Теперь, когда я совершаю эту ошибку с grep, это выглядит так:
bash-5.2$ pwd
/bin/bash
bash-5.2$ ls
file1.txt file2.txt
bash-5.2$ grep searchstring //здесь я забыл *
>
Этот >
не является нормальным приглашением. Он не принимает команды. Он ничего не делает, кроме как создавать больше их, если я нажимаю Enter:
bash-5.2$ pwd
/bin/bash
bash-5.2$ ls
file1.txt file2.txt
bash-5.2$ grep searchstring
>
>
>
Я не знаю, как вернуться к нормальному приглашению. Я не знаю, как выбраться из > земли. Я пробовал ctrl + все буквы, ничего не работает.
Ответ или решение
Для многих пользователей Linux, работающих с командной строкой, ситуация, когда вы попадаете в состояние «фrozen prompt» (замороженный запрос), может быть весьма неприятной. Как вы описали, при вводе команды grep searchstring
без указания файла для поиска, командная строка переходит в режим ожидания, обозначаемый символом >
, при этом команды не принимаются. Это происходит потому, что оболочка Bash интерпретирует ввод как вложенную команду, ожидая завершения аргумента. В данной статье мы рассмотрим, как избежать этой ситуации и как выйти из нее, если вы уже в ней оказались.
Причины возникновения проблемы
Когда вы вводите команду grep searchstring
без указания файла для поиска, оболочка считает, что вы собираетесь предоставить дополнительный ввод переменной, и ожидает его продолжения. Символ >
указывает на то, что Bash ожидает завершения ввода. Таким образом, ваше окружение не возвращается к стандартному запросу до тех пор, пока команда не будет полностью введена.
Как избежать замораживания терминала
-
Скорректируйте привычки ввода: Пользуйтесь автозаполнением и историей команд (нажимайте клавишу
Tab
или используйте клавиши стрелок), чтобы уменьшить вероятность ошибок. -
Используйте алиасы: Определите алиас для вашей команды. Например:
alias gsearch='grep searchstring *'
Теперь, вместо того, чтобы вводить полную команду каждый раз, вы сможете просто ввести
gsearch
. -
Сохраняйте часто используемые команды: Рассмотрите возможность создания скриптов для часто используемых последовательностей команд, чтобы избежать введения часто повторяющихся команд.
Как выйти из состояния «замороженного» запроса
Если вы оказались в ситуации, когда команда не завершена и отображается символ >
, существует несколько способов избежать ситуации «вытаскивания» и возврата к стандартному запросу:
-
Нажмите
Ctrl + C
: Это наиболее распространенный способ прервать команду и вернуть вас в обычный режим. Bash немедленно закончит выполнение текущей команды и вернет вас к стандартному элементу командной строки. -
Нажмите
Ctrl + D
: Это будет означать окончание ввода. Если вы используете это, когда находитесь на строке>
, Bash интерпретирует это как сигнал о завершении ввода, и вы вернётесь к обычному запросу. -
Добавьте символ
EOF
: Вы можете вручную добавить особый маркер для указания окончания ввода с помощьюCtrl + D
, если это не сработало.
Заключение
Избежать ситуации, когда вы сталкиваетесь с замороженной командной строкой, можно благодаря изменениям в привычках и настройках. Ключ к успеху – это внимательность к вводимым командам. И если же вы все же окажетесь в состоянии с >
, вы теперь знаете способы вернуться к нормальной работе. Эти методы помогут вам избежать необходимости перезагрузки сеанса и минимизировать потерю прогресса в вашей работе.