Когда я grep нет конкретного файла терминал перестает работать

Я учусь использовать оболочку. Играя с некоторыми основными командами, я столкнулся с проблемой. Это довольно простой материал, и я прошу прощения, если это расстраивает некоторых людей.

На моем рабочем столе есть файл с именем "myFirstShellScript.txt". В этом файле есть текстовая строка "show system".

Итак, если при открытии оболочки я набираю cd desktop а затем grep "show system" myFirstShellScript.txt" оболочка возвращает предложение, где появляется эта строка. Хорошо.

Но я хотел возиться. Я тогда набрал grep "show system" и нажмите ввод. Я задавался вопросом, будет ли grep искать весь рабочий стол, так как это был / это мой pwd.

Но, похоже, произошло то, что терминал перестал работать. Сначала я думал, что это может быть просто поиск, но это было какое-то время. Затем я проверил, работают ли другие команды - pwd - ничего не делает, когда я нажимаю клавишу ввода, курсор просто перемещается на новую строку.

Затем я попытался выйти. Я попытался "выйти", "конец" и "выйти". Ничего такого. Окно терминала не отвечает, как ожидалось.

Я знаю, что могу легко просто открыть другую вкладку, но хотел спросить, что я сделал с терминалом здесь?

2 ответа

Решение

Когда ты бежишь grep, если вы включите имя файла (grep pattern file), он ищет этот файл. Когда вы этого не сделаете, он ищет стандартный ввод (stdin). Если включить в трубу (foo | grep), он читает из трубы. Когда ты бежишь просто grep pattern, он читает ввод с консоли. Это очень распространенный шаблон среди утилит Unix и Linux. Когда вы печатаете exit, end, quitили что-то еще, он сравнивает его с шаблоном и печатает его, если он соответствует, так же, как если бы вы дали ему файл. Попробуйте ввести строку, которая соответствует шаблону - вы увидите, что он вам возвращается.

Чтобы выйти из этого, нажмите Ctrl+D, чтобы указать конец файла. Ctrl+C убьет большинство программ, но он менее чист, чем Ctrl+D.

Grep без аргументов читает из стандартного ввода, который является вашим терминалом. Он будет продолжать читать, пока не встретит символ конца файла. Символ конца файла - Ctrl-D. Введите это, и grep готов.

Если это не сработает, запустите stty -a и искать eof = ... найти своего персонажа.

Получено предупреждение: не вводите Ctrl-D дважды; второй будет прочитан вашей оболочкой. Если это ваша оболочка входа в систему, он будет думать, что вы сделали, и выход. Всякий раз, когда выходит из вашей оболочки входа в систему (так же, как при вводе exit) ваш сеанс входа в систему завершен и login: приглашение появляется снова. Другими словами, вы вышли из системы.

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