Удаление оператора перенаправления не изменяет выход. Зачем?

Я видел это использование перенаправления где-то и думал, что это опечатка:

grep root < /etc/passwd 

Но после запуска я увидел, что он дает тот же результат с grep root /etc/passwd :

 $ grep root < /etc/passwd root:x:0:0:root:/root:/bin/bash $ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash 

То же самое происходит с

 cat < /etc/passwd cat /etc/passwd 

Однако при использовании с ls перенаправление игнорируется:

 ls < /etc/passwd 

не выводит один и тот же вывод с

 ls /etc/passwd 

Что происходит?

One Solution collect form web for “Удаление оператора перенаправления не изменяет выход. Зачем?”

Многие утилиты, которые работают с файлами, будут принимать stdin (стандартный ввод) в виде потокового ввода или принимать имя файла в качестве параметра. Ваши < file примеры < file перенаправляют вывод файла в утилиту. Файл был открыт оболочкой и передан вашей утилите через stdin ..

С другой стороны, с cat file , cat обрабатывает открытие и чтение файла , а перенаправление не участвует.

ls никогда не читает файл, поэтому он не принимает имя файла в качестве параметра с целью открытия и чтения файла .. (он принимает маски имен файлов) … Для ls действие перенаправления, по сути, игнорируется, потому что ничего в этом процессе не читает файл с открытым оболочкой …

Чтобы определить, как работает какая-либо утилита, просто введите man utility-name в терминале … man – сокращение от ручного … например. man cat представляет вам руководство для кошек

Linux и Unix - лучшая ОС в мире.