Почему Bash сообщает «команда не найдена» в некоторых случаях в Терминале, но не в других?

1008
Loovjo

Часто, но не всегда, когда я запускаю Терминал на моем компьютере и использую pipe ( |) в команде, pbpaste | wcнапример, bash дает -bash:  wc: command not found. (Двойной пробел не опечатка).

Через некоторое время я нашел решение: убрал пробел после pipe ( pbpaste |wc) и все заработало как обычно. Но когда я запустил канал с пробелом, все заработало, и bash посчитал эту команду совершенно правильной, хотя, когда я ввел ту же самую команду несколько минут назад, она совсем не понравилась.

Вот скриншот этого:

Скриншот

У меня два очень похожих вопроса:

  • Что заставляет bash обрабатывать эти две строки по-разному, даже если они одинаковы? Я понятия не имею, почему это происходит.
  • Как я мог это исправить?
1
Вы нажимаете Shift + пробел? grawity 8 лет назад 0
@ Grawity Я так не думаю, но, похоже, нет никакой разницы. Loovjo 8 лет назад 0

1 ответ на вопрос

6
Kevin Reid

There’s a hint to the problem in the error message; there’s an extra space showing:

bash: wc: … 

Rather than:

bash: wc: … 

I assume from your question you’re using a Mac. I’m going to guess that you're using a keyboard layout in which typing the | character requires using the Alt/Option key. I think that what might be happening is that you are letting your finger linger on the Alt key as you type the space.

Alt+Space types a non-breaking space rather than a regular space character, which Bash’s parser does not consider to be whitespace of any sort and therefore takes as part of the command name.

It works the second time because you’re typing more carefully!

Похожие вопросы