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

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

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

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

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

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

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

2 ответа2

3

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

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

2

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .