Почему "эхо "qwerty" | /bin/sh" возвращает "/bin/sh: 1: qwerty: не найден"?

0

Вопрос

Я знаю, что echo команда отображает строку текста, переданную в качестве аргумента.

Итак, синтаксис echo "qwerty" будет отображаться:

qwerty

но когда я объединяю предыдущий синтаксис с | /bin/sh отобразится следующее сообщение:

/bin/sh: 1: qwerty: не найден

Я хотел бы знать, почему использование побитового оператора ИЛИ (т. Е. | ) таким образом, в конечном итоге получается такой результат.

echo sh shell
2021-11-24 05:27:13
1

Лучший ответ

1

| не является побитовым оператором ИЛИ.[1] Это оператор труб. Это приводит к тому, что stdout предыдущей программы передается в stdin следующей программы.

$ printf 'abc def\nghi\n' | wc
      2       3       12

Это показывает wc ("количество слов") считывание выходных данных printf и распечатал тот факт, что он получил 2 строки, 3 слова и 12 байт.

В вашем случае, sh считывает его stdin для команд (из-за отсутствия как -c параметр и аргумент имени файла), и, таким образом, обрабатывает qwerty в качестве команды для выполнения.


  1. Это может быть побитовое ИЛИ в арифметическом контексте при использовании bash и, возможно, другие снаряды из "семейства sh". Здесь это не так, даже если бы вы использовали bash.
2021-11-24 05:43:21

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................