AFAIK, запуск X всегда автоматически переключается на виртуальный терминал, который использует этот X-сервер. Никогда не требуется вручную переключаться на VT при запуске X.
В Debian 8 с systemd вы должны обнаружить, что X запускается на следующем свободном VT. Если вы вошли в систему на tty1 и еще не переключились на tty2, tty2 был бы бесплатным. [*] (Ctrl + alt + F2).
Причина, по которой ctrl + alt + f7 абсолютно ничего не делала, заключается в том, что VT7 полностью не использовался. Это просто то, что происходит, если вы пытаетесь переключиться на полностью неиспользуемый VT.
Если вы не уверены, я думаю, вы можете использовать привилегии root (например, sudo), чтобы узнать, какой номер VT использует X-сервер. Найдите идентификатор процесса X с помощью pgrep X
, например. 100, затем sudo lsof -p 100
. Или наоборот: sudo lsof / dev / tty [0-9] *
В более современной системе, такой как Fedora Linux, вы должны обнаружить, что X работает на той же ] VT, из которого был запущен startx
.X-сервер не может захватывать или переключать виртуальные машины, потому что он больше не работает как root
.
[*] Systemd ведет себя иначе, чем предыдущая система инициализации: она запускает текстовое приглашение на вход в VT (с VT1 на VT6) только тогда, когда вы фактически переключаетесь на него. До systemd запросы входа в систему запускались на всех 6 VT во время загрузки. Следовательно, оставив VT7 для запуска X (ctrl + alt + f7). (Кроме того, можно снова освободить VT с помощью sudo systemctl stop getty @ tty2
:).
Ну, вы знаете, что шаблон поиска содержит "-", и вы знаете, что, когда шаблон поиска содержит "-", вам нужно использовать флаг -e
. Поскольку вы не используете флаг -e
, оболочка вместо этого интерпретирует ваш «шаблон» как аргумент (и параметр). Вы можете увидеть это с помощью:
$ grep "-foo" file1
grep: oo: No such file or directory
По расширению ваш код grep "-example" file1
сообщает оболочке, что вы хотите запустить grep
с -e
аргумент и параметр «xample».
Это та же проблема, с которой мы сталкиваемся, когда пробуем что-то вроде rm -my-silly-file-name
- это не сработает, и нам нужно использовать что-то вроде rm. / -мое-глупое-имя-файла
вместо этого. Другой способ обхода - rm - -my-silly-file-name
. Мы можем использовать эту идиому здесь:
$ grep -- "-example" < file1
-example
Знак «-» сообщает оболочке, что все, что идет после него, не является аргументом.
В качестве альтернативы, вы можете просто экранировать "-" знаком "\", как вы видели:
grep "\-example" file1
В этой статье подробно рассказывается о цитировании : соответствующая часть - Параметры и обратные кавычки Команды, которые должна интерпретировать оболочка, заключаются в двойные кавычки. Когда вы используете двойные кавычки, содержимое интерпретируется оболочкой.
Аргумент, который начинается с -
, принимается как опция.
В ваших первых двух случаях первый аргумент, переданный в grep
, - это -example
, который grep
понимает как -e xample
( xample
аргумент для параметра -e
, поэтому ищите xample
).
В третьем случае \ - пример
передается в grep
. Поскольку он не начинается с -
, он не рассматривается как вариант. Вместо этого он используется как регулярное выражение. Однако поведение для \ -
не определено согласно POSIX, поэтому у вас нет гарантии, что оно соответствует. В большинстве реализаций grep
\ -
будет соответствовать -
, однако вы можете представить себе реализации grep
, где \ -
] может быть специальным оператором (см., например, GNU grep
, где \ +
- специальный оператор и не соответствует литералу +
).
Если вы хотите, чтобы -example
не использовался как опция, вам потребуется либо:
grep - -example file
. -
обозначает конец параметров. Все, что находится после него, не является опцией (поэтому первый аргумент - это шаблон для поиска, а остальные - список файлов для поиска). grep -e -example файл
. Здесь -example
используется в качестве аргумента опции -e
.Вот почему вам следует привыкнуть писать:
grep -e "$pattern" file
Или
grep -- "$pattern" file
, если вы не можете гарантировать, что $ pattern
не будет начинаться с -
.
Обратите внимание, что здесь вы также можете написать это:
grep '[-]example' file
Хотя см. Выражение в скобках (без диапазонов), соответствующее неожиданному символу в bash , о возможных осложнениях с этим подходом.
Вы «знаете, если шаблон [начинается с] '-', то следует использовать опцию -e», но вы не используете ее, когда должны. grep -e -example file1
даст вам ожидаемый результат.
Вот что на самом деле выполняется в каждом из ваших примеров:
grep -example file1
=> grep -e xample file1
(-e is necessary)grep '-example' file1
=> grep -e xample file1
(-e is necessary)grep "-example" file1
=> grep -example file1
(-e не требуется)