Иногда на моем терминале (Ubuntu) при вводе:
ls | grep toto
Я получаю эту ошибку:
grep: command not found*
Обратите внимание, что оболочка пишет grep с префиксом пробела. Как это может быть возможным?
Иногда на моем терминале (Ubuntu) при вводе:
ls | grep toto
Я получаю эту ошибку:
grep: command not found*
Обратите внимание, что оболочка пишет grep с префиксом пробела. Как это может быть возможным?
< Проверяет source вашего исходного вопроса >
<pre style="width:650px; white-space:pre-wrap">Sometimes on my terminal (Ubuntu) when I type : ls | grep toto
Спасибо за копирование актуальной строки! (Но вы не скопировали-вставьте сообщение об ошибке, озорной!) Увидите проблему? После символа трубы у вас есть неразрывное пространство. Оболочки понимают только символы ASCII; все символы, отличные от ASCII, включая U + 00A0 NO-BREAK SPACE, рассматриваются как составляющие слова, так что нерушимое пространство рассматривается как часть слова, которое находится в позиции имени команды.
Предположительно вы используете раскладку клавиатуры, где вам нужно удерживать AltGr для ввода |
. Обязательно отпустите модификатор AltGr, чтобы случайно не набрать AltGr + Space вместо Space. Обратите внимание, что вам не нужно места там, вы можете набрать ls |grep toto
, если это проще на пальцах.
Чтобы ответить на вопрос Gilles, вы можете отключить это поведение в Ubuntu/Gnome, заменив нерушимый пробельный символ обычным пространством в настройках раскладки клавиатуры.
Настройки → Клавиатура → Макет → Параметры и выберите "Использование клавиши пробела для ввода символа пробела без пробелов" и установите для него "Обычное пространство на любом уровне".
Или из командной строки
setxkbmap -option "nbsp:none"
Я нашел это исправление в http://my.opera.com/nicomen/blog/unrecognized-character-xc2.
Это также раздражало французскую клавиатуру для скриптов Perl при использовании фигурных скобок или в Python при использовании символа hash для комментариев, за которым следует пробел.